2010-05-31 101 views
1

我有一个表获取总和()结果在一个查询在MySQL

id name state num 
1 x in 10 
2 x out 1 
3 x in 5 
4 x out 2 
5 y ... 
6 y ... 

预期的结果是总结了NUM为“中”,并在一个查询“出来”,然后计算差值,像

name numin numout diff 
x 15 3  12 
y .... 

感谢

回答

1

你想要的是GROUP BY(和CASE声明):

SELECT 
    name, 
    SUM(CASE WHEN state='in' THEN num ELSE 0 END CASE) AS numin, 
    SUM(CASE WHEN state='out' THEN num ELSE 0 END CASE) AS numout, 
    SUM(CASE WHEN state='in' THEN num ELSE -1*num END CASE) AS diff 
FROM 
    table 
GROUP BY 
    name 
+0

太棒了!但要等6分钟才能标记 – bxx 2010-05-31 02:09:07