Mysql SELECT COUNT(COL)带条件

时间:2012-12-01 19:15:38

标签: mysql sql

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

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

2 个答案:

答案 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

Here is a quick demonstration on SQLfiddle.com

答案 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'