4

次のようなデータを含むテーブルがあります

id      group_id    f1    f2    f3
1          1        a     b   
2          1        c   
3          2        a           c

テキスト条件を満たす各フィールドの group_id と行数で 1 行を取得するにはどうすればよいですか?

そのように:

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

CASE特に MySQL の場合、ブール式自体が 1 または 0 を返すため、は必要ありませんf1 = 'a'。したがって、以下の例に簡略化できます。ただし、これはどの 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 に答える