views:

356

answers:

5

Let's say I have a table:

SELECT  SUM(quantity) AS items_sold_since_date,
        product_ID
FROM    Sales
WHERE order_date >= '01/01/09'
GROUP BY product_ID

This returns a list of products with the quantity sold since a particular date. Is there a way to select not only this sum, but ALSO the sum WITHOUT the where condition? I'd like to see sales since a particular date for each product alongside all (not date limited) sales.

A: 

you can write

SELECT  SUM(quantity) AS items_sold_since_date,(SELECT  SUM(quantity) AS items_sold_since_date FROM    Sales
GROUP BY product_ID) as items_sold,
        product_ID
FROM    Sales
WHERE order_date >= '01/01/09'
GROUP BY product_ID
Adinochestva
Not even valid SQL. You have something "prSELECT" that doesn't exist, mismatched parentheses, and incorrect logic in the statement itself.
Ken White
okay , i edited that
Adinochestva
A: 

something like this?:

SELECT  SUM(quantity) AS items_sold_since_date,
        total_items_sold = (SELECT SUM(quantity) from Sales GROUP BY product_ID),
        product_ID
FROM    Sales
WHERE order_date >= '01/01/09'
GROUP BY product_ID
rein
+9  A: 
SELECT  SUM(CASE WHEN order_date >= '01/01/09' THEN quantity ELSE 0 END) AS items_sold_since_date,
        SUM(quantity) AS items_sold_total,
        product_ID
FROM    Sales
GROUP BY product_ID
Joel Coehoorn
+1 for using CASE
Edward
Nifty! Thank you.
should be much faster than a correlated sub query :)
Joel Coehoorn
A: 

If you like to see total sales alongside, then you would use sum(sale_amt), and in the group by add the sale_amt. I hope it helps.

Nore
A: 

You could use GROUP BY to split up the Sales based on date. In Oracle you could say:

select count(*)
      ,case when order_date >= '01/01/09' then 'after' else 'before' end
from   log 
group by case when order_date >= '01/01/09' then 'after' else 'before' end;
gabor