1. ホーム
  2. マイスル

[解決済み】MySQLのROW_NUMBER()

2022-03-29 08:09:57

質問

MySQL で SQL Server の関数を複製する良い方法はありますか? ROW_NUMBER() ?

例えば

SELECT 
    col1, col2, 
    ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRow
FROM Table1

そして、例えば、制限する条件を追加することができます。 intRow を1に設定すると、最も大きい col3(col1, col2) のペアです。

どのように解決するのですか?

<ブロッククオート

(col1, col2)の組ごとに、最も高いcol3を持つ行を表示したい。

それは グループワイズ最大 SQLの質問で最もよく聞かれるものの1つです(簡単そうに見えて実はそうでもないため)。

私はよくNull-self-joinを採用します。

SELECT t0.col3
FROM table AS t0
LEFT JOIN table AS t1 ON t0.col1=t1.col1 AND t0.col2=t1.col2 AND t1.col3>t0.col3
WHERE t1.col1 IS NULL;

"テーブルの中で、col1,col2が一致する他の行がcol3より大きい行を取得します。" (これや他のほとんどのグループワイズマキシマム解は、複数の行が同じcol1,col2,col3を持つ場合、複数の行を返すことに気がつくと思います。もしこれが問題なら、何らかの後処理が必要かもしれません)。