【SQL】GROUP BYとWHEREはどっちを先に書く? SQL文の書く順番についてのコツ

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の評価順序どおりに書くとスムーズかと思います。


今日はここまで。