我有一张看起来像这样的表:
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;
但我有点迷失在这里。关于如何在没有巨大声明的情况下实现这一目标的任何指针?
答案 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上的旧方法,您可能仍然会发现它们存在。