我有一张表,想计算值的出现(无总和)
ID status
============
1 2
2 3
3 1
4 1
5 1
6 2
我需要以下结果:
status_1 status_2 status_3 status_4
===================================
3 2 1 0
我可以用一条 SQL 语句做到这一点吗?
select
sum(if(status=1,1,0)) as status_1,
sum(if(status=2,1,0)) as status_2,
sum(if(status=3,1,0)) as status_3,
sum(if(status=4,1,0)) as status_4
from foo
使用带有计数功能的组查询:
select status, count(status)
from tablename
group by status
Select
sum(case status When 1 Then 1 End) status1,
sum(case status When 2 Then 1 End) status2,
sum(case status When 3 Then 1 End) status3,
sum(case status When 4 Then 1 End) status4,
etc.
From table
select count(status) where status = x
将产生单个状态的计数。
也许您可以嵌套此语句,但这可能效率低下。
编辑:分组依据是要走的路。见其他答案。
重要的是要注意,您所要求的内容将暗示随着支持的状态更改而进行代码修改。我认为将结果分成几行可能会更好。这可以在几行中为您提供相同的结果:
SELECT COUNT(DISTINCT status) FROM mytable;
因此,您可以迭代空洞时间,而无需修改查询。希望有帮助
试试这个会帮助你
select status, count(*) from tablename
group by status