MySQL HAVING 子句不适用于 ' ' 或 " ",而是在没有 AS 语句的情况下起作用

MySQL HAVING clause not working with ' ' nor " ", instead works without AS statement

SELECT 
    department_id, ROUND(MIN(salary), 2) AS 'Min Salary'
FROM
    employees
GROUP BY department_id
HAVING 'Min Salary' > 800;

这似乎不起作用,而是这样:

SELECT 
    department_id, ROUND(MIN(salary), 2) AS min_salary
FROM
    employees
GROUP BY department_id
HAVING min_salary > 800

工作正常。有人可以回答我为什么做不到吗 带有 ' ' 或 " " 的 HAVING 子句,但我必须使用列名?

HAVING 'Min Salary' > 800

标识符周围的单引号将其转换为文字字符串。所以这个条件实际上是检查 string 'Min Salary' 是否大于 800。当转换为数字时,'Min Salary' 变成 0,它小于800。这不是你所期望的。

此外,请注意 MySQL 将双引号视为单引号 - 而在 Oracle 或 Postgres 等其他一些数据库中,它们用于引用标识符。

如果你想要一个包含 space 的标识符,那么你需要使用反引号,这就是 MySQL 引用标识符的方式。所以:

SELECT department_id, ROUND(MIN(salary), 2) AS `Min Salary`
FROM employees
GROUP BY department_id
HAVING `Min Salary` > 800;