/ / MySQL Case Statement - Coluna desconhecida em where - mysql, sql, case

MySQL Case Statement - Coluna desconhecida em onde - mysql, sql, case

Estou com um problema com minha consulta, o que há de errado?

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);

Eu recebo este erro: # 1054 - Coluna desconhecida "id_ranking" na "cláusula where"

Obrigado!

Respostas:

4 para resposta № 1

É porque SELECT prepare o resultado (como id_ranking) APÓS que WHERE foi chamado.

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;

É assim que funciona (ordem):

  1. Cláusula FROM
  2. Cláusula WHERE
  3. Cláusula GROUP BY
  4. Tendo cláusula
  5. Cláusula SELECT
  6. Cláusula ORDER BY

3 para resposta № 2

Aliases não são permitidos em where. Altere a consulta para

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)

ou

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)

0 para resposta № 3

Você não pode usar um alias na cláusula where, tente

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