特定のカラムから合計を算出して算出した値をWHERE句で抽出したい

※過去ブログの転記

 

MySQLを使って表題の件をやりたかったけど1054 Unknown columnでうまく動かなかったので忘れないようにメモ

ID user_id point
1 1 30
2 1 40
3 1 4
4 1 6
5 2 3
6 2 7

上記のようなテーブルを使用して以下結果のように合計を出してからWHERE句で抽出条件を指定する

user_id total
1 80
2 10
SELECT 
  user_id,
  SUM(point) AS total    
FROM 
  user_points
WHERE 
  total LIKE '%1%'
GROUP BY 
  user_id

↓ エラーが出るので修正

SELECT 
  *
FROM 
  (SELECT 
    user_id,
    SUM(point) AS total
  FROM 
    user_points 
  GROUP BY 
    user_id) AS T1
WHERE 
  total LIKE '%1%'

実行結果

user_id total
2 10

要点

WHEREの中では集計関数(SUM(),AVG() など)やカラムのエイリアスを参照できない


そもそもSELECTの実行順序についても毎度ググってるレベルの曖昧さなので次の記事くらいでちゃんと整理しておきたい