MySQL Case 语句 - 未知列在哪里

标签 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”

谢谢!

最佳答案

这是因为 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 子句

关于MySQL Case 语句 - 未知列在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20552989/

相关文章:

php - Highcharts 饼图切片错误

mysql - CF8 - 循环求和

sql - 有没有办法通过 IN 列表中的值来限制查询结果?

mysql - 选择案例 * 何时

MYSQL - 根据单个 CASE 语句更新多个字段

MySQL:查询并不总是返回多个商店的最新最低价格

mysql - 使用 UPDATE 用 AVG 数据填充第二个表的列

sql - 如何获取第一个月的 00 :00:00 in datetime,?

MySQL 自定义排序

bash - Shell 是可变数字