sql >> データベース >  >> RDS >> Mysql

SQLテーブルの条件で列名として列値を選択する方法

    そのための1つの方法は、条件付き集計を使用することです

    SELECT name,
           MAX(CASE WHEN field = 'Gender' THEN value END) gender,
           MAX(CASE WHEN field = 'Age' THEN value END) age
      FROM customers
     GROUP BY name
    

    もう1つの方法(これらの2つの列のみに関心がある場合)は

    SELECT c1.name, c1.value gender, c2.value age
      FROM customers c1 JOIN customers c2
        ON c1.name = c2.name
       AND c1.field = 'Gender'
       AND c2.field = 'Age';
    

    名前ごとに性別と年齢の両方が存在すると仮定します。そうではない場合は、OUTER JOINを使用してください INNER JOINの代わりに そのように

    SELECT n.name, c1.value gender, c2.value age
      FROM
    (
      SELECT DISTINCT name
        FROM customers
    ) n LEFT JOIN customers c1
        ON n.name = c1.name AND c1.field = 'Gender' 
        LEFT JOIN customers c2
        ON n.name = c2.name AND c2.field = 'Age';
    

    出力:

    |   NAME | GENDER | AGE |
    |--------|--------|-----|
    | Angela | Female |  28 |
    |  Davis |   Male |  30 |
    

    こちらがSQLFiddle です。 デモ



    1. MySQLのロックの粒度を理解する

    2. MySQLデータベースが破損しています...どうすればよいですか?

    3. 特定の条件でgroupbyでカウントするSQLクエリ

    4. MySQL数学関数(全リスト)