我有一个包含一些数据的表
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)
使用一系列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)