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

複数の行の値を複数のテーブル句を使用して1つの行に選択します

    各属性にユーザーの値が1つしかない場合は、スパース行列を作成することから始めることができます。

    SELECT user_id
          ,CASE WHEN attrib_id = 1 THEN value ELSE NULL END AS attrib_1_val
          ,CASE WHEN attrib_id = 2 THEN value ELSE NULL END AS attrib_2_val
      FROM UserAttribute;
    

    次に、集計関数を使用して行列を圧縮します。

    SELECT user_id
          ,MAX(CASE WHEN attrib_id = 1 THEN value ELSE NULL END) AS attrib_1_val
          ,MAX(CASE WHEN attrib_id = 2 THEN value ELSE NULL END) AS attrib_2_val
      FROM UserAttribute
      GROUP BY user_id;
    

    コメントに応じて、IDではなく属性名で検索:

    SELECT ua.user_id
          ,MAX(CASE WHEN a.attrib_name = 'attrib1' THEN ua.value ELSE NULL END) AS attrib_1_val
          ,MAX(CASE WHEN a.attrib_name = 'attrib2' THEN ua.value ELSE NULL END) AS attrib_2_val
      FROM UserAttribute ua
      JOIN Attribute a ON (a.attrib_id = ua.attrib_id)
      WHERE a.attrib_name IN ('attrib1', 'attrib2')
      GROUP BY ua.user_id;
    


    1. RIGHTJOINとCOUNTの組み合わせ

    2. モーダルで現在の行の値を渡す方法は?

    3. MySQL Left()またはSUBSTRING()?

    4. Python:mysqlテーブルから選択する場合、タプルインデックスはstrではなく整数である必要があります