この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

サブクエリーでORDER BYは使えない

JPQLにおけるサブクエリーの定義は次の通りです。見ての通り、ORDER BYは使えません。

subquery ::= simple_select_clause subquery_from_clause [where_clause] [groupby_clause] [having_clause]


でも、LIMITと組み合わせてトップ10とかを抽出したい場合はどうするんだろう。HAVINGを使うのかな。
と思ってググったら見つかりました。


SQLで先頭から上位10件のレコードを取得する方法(Oracle、SQL Server、MySQL、PostgreSQL)

SELECT DISTINCT COUNT(*), A.Field1, A.Field2, A.Field3 FROM Table1 A, Table1 B
    WHERE (A.Field1 >= B.Field1)
    GROUP BY A.Field1, A.Field2, A.Field3
    HAVING COUNT(*) <= 10;

(一部抜粋)


自己結合を使ってWHERE句でソートするのか。かっけー。