0

我有一张表,想计算值的出现(无总和)

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 语句做到这一点吗?

4

6 回答 6

2
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
于 2013-07-15T13:11:34.353 回答
0

使用带有计数功能的组查询:

select status, count(status)
from tablename
group by status
于 2013-07-15T13:10:45.960 回答
0
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
于 2013-07-15T13:12:16.760 回答
0
select count(status) where status = x

将产生单个状态的计数。

也许您可以嵌套此语句,但这可能效率低下。

编辑:分组依据是要走的路。见其他答案。

于 2013-07-15T13:14:08.517 回答
0

重要的是要注意,您所要求的内容将暗示随着支持的状态更改而进行代码修改。我认为将结果分成几行可能会更好。这可以在几行中为您提供相同的结果:

SELECT COUNT(DISTINCT status) FROM mytable;

因此,您可以迭代空洞时间,而无需修改查询。希望有帮助

于 2013-07-15T13:16:50.947 回答
0

试试这个会帮助你

select status, count(*) from tablename
group by status
于 2013-07-15T13:19:59.060 回答