简体   繁体   中英

Select sum of column according to case statement in mysql query

I have a table with three columns: 1. store name 2. data type (sales, return) 3. qty

---------------------------
|  Stores |  Data  |  Qty |
---------------------------
|    HM   | Sales  |  15  |
|    RD   | Sales  |  10  |
|    HM   | Return |   4  |
|    RD   | Return |   2  |

I want to select all store names, sales qty, return qty as following

--------------------------
| Store | Sales | Return |
--------------------------
|   HM  |   15   |   4   |
|   RD  |   10   |   2   |

Here's what I've tried:

SELECT store, 
CASE `data`
WHEN 'Sales'  THEN SUM(qty)
ELSE NULL
END as `Sales`,
CASE `data`
WHEN 'Return' THEN SUM(qty)
ELSE NULL
END as `Return`
FROM `full_report`
GROUP BY store

Result: I get wrong sales qty and Null for return qty!

You can use conditional aggregation . . . mixing case with sum() :

select fr.store,
       SUM(case when fr.data = 'Sales' then fr.qty else 0 end) as Sales,
       SUM(case when fr.data = 'Return' then fr.qty else 0 end) as Returns
from full_report fr
group by fr.store;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM