Mysql SELECT COUNT(COL)带条件

Goo*_*ver 2 mysql sql

我有一个包含一些数据的表

id      group_id    f1    f2    f3
1          1        a     b   
2          1        c   
3          2        a           c
Run Code Online (Sandbox Code Playgroud)

如何检索一行with group_id和每个字段的行数满足一些文本条件?

像那样:

MY_MAGIC_SELECT(`f1`='a',`f3`='c');
Run Code Online (Sandbox Code Playgroud)

必须回来

group_id    f1    f2    f3
   1        1     0     0        
   2        1     0     1
Run Code Online (Sandbox Code Playgroud)

Mic*_*ski 9

使用一系列SUM(CASE...)聚合函数来表示您的每个条件都应该这样做.所述CASE返回一个0或1,如果该条件匹配,并且SUM()将结果.该GROUP BY应用上group_id.

SELECT
  group_id
  SUM(CASE WHEN f1 = 'a' THEN 1 ELSE 0 END) AS f1,
  SUM(CASE WHEN f2 = 'b' THEN 1 ELSE 0 END) AS f2,
  /* f3 = 'b' isn't in your "magic select" but here it is anyway... */
  SUM(CASE WHEN f3 = 'c' THEN 1 ELSE 0 END) AS f3
FROM 
  yourtable
GROUP BY group_id
Run Code Online (Sandbox Code Playgroud)

特别是对于MySQL,你不需要CASE因为布尔表达式f1 = 'a'本身会返回1或0.所以你可以将它简化为下面的例子.但是,这不适用于任何RDBMS.

SELECT
  group_id
  SUM(f1 = 'a') AS f1,
  SUM(f2 = 'b') AS f2,
  SUM(f3 = 'c') AS f3
FROM 
  yourtable
GROUP BY group_id
Run Code Online (Sandbox Code Playgroud)

以下是SQLfiddle.com的快速演示