2016-12-05 22 views
1

列不同的标志的选择计数我有一个表:在MySQL的

id flag 
1 Y 
1 Y 
1 Y 
1 N 
1 N 
2 Y 
2 N 
2 N 
3 Y 
3 N 

我想要做的SELECT语句,这将给我下面的输出。

id count_flag_Y count_flag_N 
1  3    2 
2  1    2 
3  1    1 

我用的是select case方法,但越来越语法错误尝试。

SELECT id,SUM(CASE WHEN flag= 'Y') as count_flag_Y, 
SUM(CASE WHEN flag= 'N') as count_flag_N 
from tablename 
GROUP BY id 

有没有办法做到这一点?

回答

4

您的查询已经不远了,您只有CASE表达式存在轻微问题。试试这个:

SELECT id, 
     SUM(CASE WHEN flag= 'Y' THEN 1 ELSE 0 END) AS count_flag_Y, 
     SUM(CASE WHEN flag= 'N' THEN 1 ELSE 0 END) AS count_flag_N 
FROM tablename 
GROUP BY id 
2

你很接近,但在MySQL不需要CASE

SELECT id, SUM(flag = 'Y') as count_flag_Y, 
     SUM(flag = 'N') as count_flag_N 
FROM tablename 
GROUP BY id; 

的MySQL把布尔表达式就像在一个数值上下文整数,“1”为真,“ 0“为假。