SQLを書くときみなさんはどこから書いていますか?
GROUP BYとWHEREの書く順番って間違えちゃったりしませんか?
SQLの評価順序を意識して書くようにできれば、
構文エラーも防げるかと思うので、おすすめです。
GROUP BYとWHEREでは、「WHERE」 を先に書く!
正解
SELECT id
FROM MemMst
WHERE name = '山田'
GROUP BY id
不正解
SELECT id
FROM MemMst
GROUP BY id
WHERE name = '山田'
SQLの評価順序と、構文の並び順について
SQLが実行される順番は以下のようになっています。
詳しくは、別の回で。→http://natsuono.com/2019/01/18
FROM → WHERE → GROUPBY → HAVING → SELECT → ORDERBY
一方でSQLの構文の並び順はこのようになっています。
SELECT → FROM → WHERE → GROUPBY → HAVING → ORDERBY
例文
SELECT MM.Name
,COUNT(*)
FROM ShosaiData as SD
INNER JOIN MemMst as MM
ON SD.MemCode = MM.MemCode
WHERE SD.CreateDate >= '2020-01-01'
GROUP BY MM.MemCode
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC;
まず、FROM句から書きましょう。
先にSELECT句を書こうとすると、”MM”ってどのテーブル?ってなりますよね。
それに、COUNT(*)も集約したデータに対してのカウントなので、後のほうが良いと思います。
WHEREでテーブルに対して条件を絞って、グルーピングする…
ってな感じで、SQLの評価順序どおりに書くとスムーズかと思います。
今日はここまで。
リンク
リンク