0

想象一下有一个表,其中有一列名为 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 ......)

4

2 回答 2

3

您只需对表格进行分组,应用合适的聚合函数:

SELECT   status, COUNT(*)
FROM     my_table
GROUP BY status

sqlfiddle上查看。

如果状态缺失,您可以在应用程序代码中将其视为 0。

于 2013-10-27T21:50:21.447 回答
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

于 2013-10-27T21:58:42.327 回答