Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算mysql中不同项目的数量?_Mysql_Sql - Fatal编程技术网

如何计算mysql中不同项目的数量?

如何计算mysql中不同项目的数量?,mysql,sql,Mysql,Sql,假设您有一个名为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 输出应该是一行(因此是一个查询) 进行不同计数时(我的搜索中大多数返回的答案都会返回有多少不同的元素,在本例中为4个…)您只需应用适当的聚合函数对表进行分组: SELECT st

假设您有一个名为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 输出应该是一行(因此是一个查询)

进行不同计数时(我的搜索中大多数返回的答案都会返回有多少不同的元素,在本例中为4个…)

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

SELECT   status, COUNT(*)
FROM     my_table
GROUP BY status
在电视上看

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

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

SELECT   status, COUNT(*)
FROM     my_table
GROUP BY status
在电视上看


如果某个状态丢失,您可以从应用程序代码中将其视为0。

将结果放在一行比分组更为笨拙:

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不是其中之一


将结果放在一行比分组更笨拙:

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不是其中之一


我希望看到一行输出解决方案,但我也可以这样使用,谢谢,我将在8小时内接受您的回答minutes@VincentDuprez:可以在一行中获得结果,但这绝对是推荐的方法,因为它将更加有效-特别是如果
status
列已被索引。我希望看到一行输出解决方案,但我也可以这样使用,谢谢,我将在8中接受您的答案minutes@VincentDuprez:可以在一行中获得结果,但这绝对是推荐的方法,因为它将更加有效-特别是如果
status
列被索引。感谢更简单的解决方案eggyal,我将把它设置为正确的答案,因为它是问题中的一行解决方案,但由于它是干净的,我会对您的答案进行投票。@VincentDuprez:很公平,但请注意,这种方法不能很好地扩展(它总是需要一个完整的表扫描)。并不是每个数据库都允许您以这种方式将条件视为1或0。@Laurence:同意,但问题已标记。谢谢您提供了更简单的解决方案eggyal,我会将此设置为正确答案,因为这是问题中的一行解决方案,但由于它是干净的,我会给您投票。@VincentDuprez:这很公平,但请注意,这种方法不能很好地扩展(它总是需要完整的表扫描)。不是每个数据库都允许您以这种方式将条件视为1或0。@Laurence:同意,但问题是有标签的。