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 等其他一些数据库中,它们用于引用标识符。
如果你想要一个包含空格的标识符,那么你需要使用反引号,这就是MySQL引用标识符的方式。所以:
SELECT department_id, ROUND(MIN(salary), 2) AS `Min Salary`
FROM employees
GROUP BY department_id
HAVING `Min Salary` > 800;
关于MySQL HAVING 子句不适用于 ' ' 或 "",而是在没有 AS 语句的情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59912482/