21

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

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

现在对于 each 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;

但我有点从这里迷路了。关于如何在没有大量声明的情况下实现这一目标的任何指示?

4

2 回答 2

39

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

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

sqlfiddle上查看。

于 2012-07-07T18:12:24.007 回答
0

正如@Zane 上面评论的那样,典型的方法是使用 CASE 表达式来执行枢轴。

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

于 2012-07-07T19:52:51.067 回答