/ / MySQLケースステートメント - whereの不明な列 - mysql、sql、case

MySQLのケースステートメント - 不明なカラム - mysql、sql、case

クエリに問題があります。何が問題なのですか。

SELECT
CASE
WHEN cp_pessoa.score < 100 THEN 1
WHEN cp_pessoa.score < 300 THEN 2
WHEN cp_pessoa.score >= 300 THEN 3
END as id_ranking
FROM cp_pessoa
WHERE id_ranking IN (1,2);

このエラーが発生しました:#1054 - "where句"の不明な列 "id_ranking"

ありがとうございました!

回答:

回答№1は4

なぜなら、SELECTはWHEREより後の結果を(id_rankingとして)準備するからです。

SELECT
CASE
WHEN cp_pessoa.score < 100 THEN 1
WHEN cp_pessoa.score < 300 THEN 2
WHEN cp_pessoa.score >= 300 THEN 3
END as id_ranking
FROM cp_pessoa
WHERE cp_pessoa.score < 300;

これはどのように動作するかです(順序):

  1. FROM句
  2. WHERE句
  3. GROUP BY句
  4. HAVING句
  5. SELECT句
  6. ORDER BY句

回答№2の場合は3

エイリアスはで許可されていません where。どちらかにクエリを変更

SELECT * FROM
(
SELECT
CASE
WHEN cp_pessoa.score < 100 THEN 1
WHEN cp_pessoa.score < 300 THEN 2
WHEN cp_pessoa.score >= 300 THEN 3
END as id_ranking
FROM cp_pessoa
)a
WHERE id_ranking IN (1,2)

または

SELECT
CASE
WHEN cp_pessoa.score < 100 THEN 1
WHEN cp_pessoa.score < 300 THEN 2
WHEN cp_pessoa.score >= 300 THEN 3
END as id_ranking
FROM cp_pessoa
WHERE
CASE
WHEN cp_pessoa.score < 100 THEN 1
WHEN cp_pessoa.score < 300 THEN 2
WHEN cp_pessoa.score >= 300 THEN 3
END IN (1,2)

回答№3の場合は0

where節でエイリアスを使うことはできません。代わりに試してみてください。

SELECT
CASE
WHEN cp_pessoa.score < 100 THEN 1
WHEN cp_pessoa.score < 300 THEN 2
WHEN cp_pessoa.score >= 300 THEN 3
END as id_ranking
FROM cp_pessoa
WHERE cp_pessoa.score < 300