Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

how to sum up in mysql

Posted on 2007-11-20
19
Medium Priority
?
523 Views
Last Modified: 2008-02-23
I have a table in mysql called 'x' with columns a,b,c.

I want one sql statement that will sum up the following:

1) the entries in col 'a' where the date  <=  '2001-01-01'
2) the entries in col 'b' where the date  <=  '2001-01-01'
3)  the most recent entry in col 'c' where the date  <  '2001-01-01'

thanks!

Server info:
MySQL 5.0.45-community-nt via TCP/IP
MySQL Client Version 5.1.11
InnoDB tables
0
Comment
Question by:jmokrauer
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
19 Comments
 
LVL 23

Expert Comment

by:Ashish Patel
ID: 20320382
select Sum(Total) As TotalAll From
(select 'a' as col, sum(a) as Total from x where date  <=  '2001-01-01'
union
select 'b' as col, sum(b) as Total from x where date  <=  '2001-01-01'
union
select 'c' as col, sum(c) as Total from x where date  <  '2001-01-01' ) xyz
0
 
LVL 15

Expert Comment

by:spprivate
ID: 20320383
Select t1.val  +t2.val2
from (Select sum(a+b) as val  from x where date  <=  '2001-01-01' ) t1,
(Select sum(c) as val2  from x where date <  '2001-01-01' ) t2

0
 

Author Comment

by:jmokrauer
ID: 20320425
I dont see how the above solutions are doing the following:

3)  the most RECENT entry in col 'c' where the date  <  '2001-01-01'

Pls explain.  thanks
0
Veeam Task Manager for Hyper-V

Task Manager for Hyper-V provides critical information that allows you to monitor Hyper-V performance by displaying real-time views of CPU and memory at the individual VM-level, so you can quickly identify which VMs are using host resources.

 
LVL 7

Expert Comment

by:dansoto
ID: 20320507
You are trying to pull 3 columns with a completely different amount of rows in each.  I'm not sure you can do that in one query.
0
 
LVL 7

Expert Comment

by:dansoto
ID: 20320526
BTW...I think your use of the word "sum" has thrown people off when you aren't really looking for a sum.  My understanding is that you want output that looks like:

ColA          ColB          ColC
1                1                 1
2                2                      
3                3      
4                  

Is that correct?
0
 

Author Comment

by:jmokrauer
ID: 20320561
dansoto,

No, I want the sum.  So the answer in the case below would be 21.  ColA & BolB will always have the same number of entries.

ColA          ColB          ColC
1                1                 1
2                2                      
3                3      
4                4

Thanks.
0
 
LVL 7

Expert Comment

by:dansoto
ID: 20320584
So what is missing from the solution by 'asvforce'?  His query should do the job..
0
 

Author Comment

by:jmokrauer
ID: 20320623
I am not sure but I don't think that the final part of his statement (which I put below) selects  the most RECENT entry to add to the sum of the other columns.  I think it sums all the entries before 2001-01-01.

"select 'c' as col, sum(c) as Total from x where date  <  '2001-01-01' )"

thanks for your perseverance & responsiveness



0
 
LVL 7

Expert Comment

by:dansoto
ID: 20320714
Ahh.. well probably confused the issue by including a date range in your question (  <  '2001-01-01).

So since you're pulling the "most recent".. the sum of that column will alway be "1"..right?
0
 

Author Comment

by:jmokrauer
ID: 20320933
No, it will be the value associated with the most recent date earlier than '2001-01-01'.

thanks.
0
 
LVL 7

Expert Comment

by:dansoto
ID: 20321054
Ok..I'm confused.  There can only be 1 most recent date ever... regardless of the timeframe, therefore that value will always be 1...
0
 

Author Comment

by:jmokrauer
ID: 20321071
The value in column 'c' associated with the most recent date might be a one, but it could be 425 or 1.8.  I don't know what value it is without looking it up.
0
 
LVL 7

Expert Comment

by:dansoto
ID: 20321095
Ok..so then colC is not a sum column.. but rather the unique iD of some record...right?
0
 

Author Comment

by:jmokrauer
ID: 20321104
yes
0
 
LVL 7

Expert Comment

by:dansoto
ID: 20321131
So we are back to what I stated a while ago... the term "sum" threw many people off.  You are not looking for a sum in column "C".  Only columns "a" and "b" would contains sum counts...
0
 

Author Comment

by:jmokrauer
ID: 20321165
sum(entries in colA where date<= '2001-01-01' )+sum(entries in colB where date<='2001-01-01' )+value of the most recent entry in colC where date< '2001-01-01'
0
 
LVL 7

Expert Comment

by:dansoto
ID: 20321310
Ok.. .try this then...


SET @a = (select sum(col_a) from x where date <=  '2001-01-01');
SET @b = (select sum(col_b) from x where date <=  '2001-01-01');
SET @c = (select col_c from x where date <= '2001-01-01' order by date desc limit 1);
SET @total = @a+@b+@c;
SELECT @total;

Open in new window

0
 

Author Comment

by:jmokrauer
ID: 20321354
It looks good but for my application, i need one sql statement. thanks.
0
 
LVL 7

Accepted Solution

by:
dansoto earned 2000 total points
ID: 20321557
Ok.. try this:
Note that the last select statement has "some_other_column".   We need to select some other column to group by (other than colC) in order to have and even number of columns for the UNIONs to work.  Since it's only returning one value of use, it shouldn't matter which column.
select sum(Total) as complete_total from (
select colA as col, sum(colA) as Total from x where date <= '2001-01-01' group by colA
UNION
select colB as col, sum(colB) as Total from x where date <= '2001-01-01' group by colB
UNION
select some_other_column as col, max(colC) as Total from x where date <= '2001-01-01' group by some_other_column
) as tbl;

Open in new window

0

Featured Post

Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I'm trying, I really am. But I've seen so many wrong approaches involving date(time) boundaries I despair about my inability to explain it. I've seen quite a few recently that define a non-leap year as 364 days, or 366 days and the list goes on. …
In this blog post, we’ll look at how ClickHouse performs in a general analytical workload using the star schema benchmark test.
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…
Suggested Courses

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question