J'ai un problème avec ma requête, qu'est-ce qui ne va pas?
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);
Je reçois cette erreur: # 1054 - Colonne inconnue "id_ranking" dans "où clause"
Je vous remercie!
Réponses:
4 pour la réponse № 1C’est parce que SELECT prépare le résultat (sous la forme id_ranking) APRÈS que WHERE ait été appelé.
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;
Voici comment cela fonctionne (ordre):
- Clause FROM
- Clause WHERE
- Clause GROUP BY
- Clause AYANT
- Clause SELECT
- Clause ORDER BY
3 pour la réponse № 2
Les alias ne sont pas autorisés dans where
. Changer la requête en soit
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 pour la réponse № 3
Vous ne pouvez pas utiliser un alias dans la clause where, essayez plutôt
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