我有一个包含一些数据的表,如
id group_id f1 f2 f3
1 1 a b
2 1 c
3 2 a c
如何使用group_id检索一行,并且每个字段的行数满足某些文本条件?
就像那样:
MY_MAGIC_SELECT(`f1`='a',`f3`='c');
必须返回
group_id f1 f2 f3
1 1 0 0
2 1 0 1
答案 0 :(得分: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
特别是对于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
答案 1 :(得分:-2)
嗯,这是简单的MySQL,你需要学习这个。请检查一下: http://www.w3schools.com/sql/sql_where.asp
http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html
SELECT column_name(s)
FROM table_name
WHERE column_name operator value
例如
SELECT * FROM Persons
WHERE City='Sandnes'