Mám problém s mojím dopytom, čo sa deje?
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);
Zobrazila sa mi táto chyba: # 1054 - Neznámy stĺpec „id_ranking“ v časti „where Klauzule“
Ďakujem!
odpovede:
4 pre odpoveď č. 1Je to preto, že VYBERTE výsledok prípravy (ako id_ranking) PO CELOM, KDE sa volalo.
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;
Takto to funguje (poradie):
- FROM
- Klauzula WHERE
- Doložka GROUP BY
- HAVING doložka
- Klauzula SELECT
- Doložka ORDER BY
3 pre odpoveď č. 2
Aliasy nie sú povolené v where
, Zmeňte dotaz na jeden
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)
alebo
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 pre odpoveď č. 3
Namiesto toho môžete použiť alias v klauzule 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