通过计数和分组使这个SQL查询正确

时间:2012-11-16 14:32:09

标签: mysql sql

我在尝试正确查询时遇到了问题。

说我有一张包含以下数据的表:

id    |   xyz     |   code
===========================
1     |    1      |    ba
2     |    1      |    zz
3     |    1      |    ba
1     |    1      |    zz
1     |    1      |    ba
2     |    1      |    zz

我想得到'xyz'的总和,按id分组。

SELECT id, SUM(xyz) as mysum FROM table WHERE xyz=1 GROUP BY id

我最终会得到结果:

id   |  mysum 
================
1    |  3
2    |  2
3    |  1

完美。

问题是,我真正喜欢的是按“代码”列分组,所以如果对于id:1,其中有两个代码为“ba”的条目,则结果为更像这样:

id   |  mysum 
================
1    |  2
2    |  1
3    |  1

这是我对mysql的有限理解失败的地方。因为我会想这样做一个查询:

SELECT id, SUM(xyz) AS mysum FROM table WHERE xyz=1 GROUP BY id, code

但是这显然给出了我之后的结果。

如何进行这种对xyz列进行求和的查询,如果已经添加了具有相同“代码”的查询,则省略它?

2 个答案:

答案 0 :(得分:2)

SELECT id,
       SUM(CASE WHEN code = 'ba' then 1 ELSE 0 END)
FROM table1
GROUP BY id

后续问题:为什么id = 2的值为1,是不是为零?

更新1

SELECT id,
       count(Distinct code)
FROM table1
GROUP BY id

答案 1 :(得分:0)

SELECT code,SUM(xyz) FROM table GROUP BY code,xyz