4

我有一张表,上面有一些数据,比如

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
4

2 回答 2

13

使用一系列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

这是 SQLfiddle.com 上的快速演示

于 2012-12-01T19:18:57.020 回答
-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'
于 2012-12-01T19:18:40.037 回答