想象一下,有一个名为status的列的表:
status
------
A
A
A
B
C
C
D
D
D
如何计算有多少行有A,有多少行有B等? 这种输出:
A |B |C |D |E
------------------
3 |1 |2 |3 |0
对于E = O,这将始终是A,B,C,D和E. 输出应该是一行(因此是1个查询)。
当做一个非常重要的计数时(我的搜索中大多数返回的答案,它确实返回了有多少不同的元素,在这种情况下为4 ...)
答案 0 :(得分:3)
你只需要分组你的表,应用合适的聚合函数:
SELECT status, COUNT(*)
FROM my_table
GROUP BY status
在sqlfiddle上查看。
如果缺少状态,您可以在应用程序代码中将其视为0。
答案 1 :(得分:2)
将结果放在一行比较笨拙的小组:
Select
sum(status = 'A') 'A',
sum(status = 'B') 'B',
sum(status = 'C') 'C',
sum(status = 'D') 'D',
sum(status = 'E') 'E'
From
my_table
某些数据库支持pivot
,这使得它更好一些。 MySQL不是其中之一。
<强> Example SQLFiddle 强>