とまと あんらいぷ…

エンジニアの活動記録とかつぶやきとか

GitHub

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

グループ集計で最小(最大)値を持つ行のみ取得するSQL

完全にトラックバックのURL紹介になりますが。
というか、まんまなんですけど、非常に役に立ったので!


MiYaBiS Note.さん

タイトルの通り
集計した結果の最大(最小)値を持つレコードを1行だけ欲しい事って意外と多い。

いろいろクエリをこねくり回してなんとか取得できるんだけど
スマートに且つディ・モールトかっこよく!書きたいじゃないですか。

MiYaBiS Note.さんの引用がもうね。最高っす。
>>引用<<

TableA
TableA

SELECT *
FROM Test A
WHERE NOT EXISTS
( SELECT *
FROM Test
WHERE Type = A.Type
AND Value < A.Value
)

サブクエリで取得出来るデータは、該当するデータとは反対のデータです。
メインクエリの Type 値とサブクエリの Type 値が等しく(グループとしてる)、
サブクエリの Value 値より メインクエリの Value 値が大きいデータとなります。
サブクエリの結果を NOT EXISTS としてるのでその反対、最小値のみとなります。

※最大値の場合は、「Value < A.Value」の「小なり(<)」が「大なり(>)」になります。


>>引用<<

これで、一番でっかいデータが取ってこれるのか。
キモは Type = A.Type でグルーピングできるとこか。


実際にはこんな感じで中で中で倍増して、マッチしなかった結果のみ返ってきてると考えればいいのか。。。

TableA_SUB2


何しろ、すっきりしたクエリがかけていいっす!



スポンサーサイト

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。