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

左結合を使用したMySQLgroup

    これはあなたが文字通りここで望んでいることかもしれないと思います:

    SELECT DISTINCT
        status_id,
        (SELECT MAX(user_id) FROM comments c2 WHERE c1.status_id = c2.status_id) user_1,
        (SELECT user_id FROM comments c2 WHERE c1.status_id = c2.status_id
         ORDER BY user_id LIMIT 1 OFFSET 1) user_2
    FROM comments c1
    WHERE user_id IN (2,3);
    

    デモ

    (更新フィドル)

    相関サブクエリを使用して、最大のuser_idを見つけることができます および最大2番目のuser_id status_idごとに 、次に、それらのそれぞれを2つの別々の列としてスピンアウトします。 GROUP_CONCATを使用する ここでは、CSVリストとして任意の数のユーザーに簡単に対応できるアプローチが望ましい場合があります。

    また、MySQL 8以降を使用している場合は、ランク分析関数を利用できます。これも簡単です。



    1. SQLServerで高速に実行されるOracleで低速で実行されるSELECTクエリの最適化

    2. Redshiftで行を分割する

    3. 顧客が一緒に購入した製品を見つける

    4. Ora-01427の単一行サブクエリがselectで複数の行を返す問題を修正するにはどうすればよいですか?