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

标签 mysql sql string group-by having-clause

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/

相关文章:

php - 无法使用 adodb 将字符串传递给 MySQL 存储过程

mysql - 为什么在将 LIMIT 与 Order BY 结合使用时 MySQL 查询速度变慢?

javascript - String JavaScript 中的反斜杠不算长度,为什么?

Mysql:使用 IN 子查询删除

c# - 使用 API 连接到远程 mysql 数据库

MySQL - 基于其他列的订单自动填充列

c# - 如何从另一个行列表中选择包含部分值的行?

mysql - 仅从两个实体中获取匹配的记录

java - 如何从多个其他文本文件创建一个文本文件?

java - 如何将字符串矩阵格式化为 x 行和 y 列