SQL - 计算具有特定值的行

时间:2012-07-07 18:08:09

标签: mysql sql

我有一张看起来像这样的表:

id  value
1   0
1   1
1   2
1   0
1   1
2   2
2   1
2   1
2   0
3   0
3   2
3   0

现在对于每个id,我想计算0和1的出现次数以及该ID的出现次数(该值可以是任何整数),因此最终结果看起来像这样:

id  n0  n1  total
1   2   2   5
2   1   2   4
3   2   0   3

我设法得到了这句话的第一行和最后一行:

SELECT id, COUNT(*) FROM mytable GROUP BY id;

但我有点迷失在这里。关于如何在没有巨大声明的情况下实现这一目标的任何指针?

2 个答案:

答案 0 :(得分:31)

使用MySQL,您可以使用SUM(condition)

SELECT   id, SUM(value=0) AS n0, SUM(value=1) AS n1, COUNT(*) AS total
FROM     mytable
GROUP BY id

sqlfiddle上查看。

答案 1 :(得分:0)

正如@Zane所述,典型的方法是使用CASE表达式来执行数据透视。

SQL Server现在有一个您可能会看到的PIVOT运算符。 DECODE()和IIF()是Oracle和Access上的旧方法,您可能仍然会发现它们存在。