2

私は次の表を持っています:

+----+----------+------------+
| id | drink    | gender     |
+----+----------+------------+
|  1 | Beer     | m          |
|  2 | Milk     | f          |
|  3 | Milk     | f          |
|  4 | Tea      | m          |
+----+----------+------------+

ここで、どの性別がどの飲み物を好むかを数えたいと思います。結果は次のようになります。

+-------+-------+--------+
| drink | fem   | male   |
+-------+-------+--------+
|  Beer | 0     | 1      |
|  Milk | 2     | 0      |
|  Tea  | 0     | 1      |
+----+----------+--------+

誰かアイデアはありますか?

よろしくお願いします。

4

1 に答える 1

4
SELECT drink,
       SUM(CASE WHEN gender = 'f' THEN 1 ELSE 0 END) fem,
       SUM(CASE WHEN gender = 'm' THEN 1 ELSE 0 END) male
FROM tableName
GROUP BY drink

SQLFiddleデモ

上記のクエリは、さらにプリペアドステートメントに変換できます。これは、たとえば、元のクエリを変更せずに、性別(たとえばu、ユニセックス)に別の値を追加する場合に役立ちます。例、

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(case when gender = ''',
      gender,
      ''' then 1 ELSE 0 end) AS ',
      gender
    )
  ) INTO @sql
FROM tableName;

SET @sql = CONCAT('SELECT drink, ', @sql, ' 
                   FROM tableName 
                   GROUP BY drink');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SQLFiddleデモ

于 2012-10-28T23:46:27.590 に答える