行到mysql中的列

时间:2014-08-16 17:40:37

标签: mysql count transpose

我在做选择:

select  id,
        status,
        count(status) as qtd
from    user
group by id, status;

回报是:

id | status | qtd
1     YES      5
1      NO      3
2     YES      3
2      NO      1

我想要这个:

id | YES | NO
1     5    3
2     3    1

感谢。

2 个答案:

答案 0 :(得分:2)

您可以这样做,使用sum()中的表达式(如sum(status ='Yes'))将导致布尔值(0/1),因此您可以根据您在sum函数中提供的条件计算您的计数

select id,
 sum(status ='Yes') as `YES`,
 sum(status ='No') as `NO`
 from user
group by id;

答案 1 :(得分:2)

注意:

你可以使用案例逻辑来做你想要的事情。基本上你想要转动结果并转动它们你必须使用带有条件的聚合来伪造数据透视表,因为mysql没有办法完成那个< / p>

QUERY:

SELECT 
    id,
    SUM(CASE status WHEN 'Yes' THEN 1 ELSE 0 END) as 'YES',
    SUM(CASE status WHEN 'No'  THEN 1 ELSE 0 END) as 'NO'
FROM user
GROUP BY id;

DEMO

输出:

+----+-----+----+
| id | YES | NO |
+----+-----+----+
| 1  |  5  | 3  |
| 2  |  3  | 1  |
+----+-----+----+