MySQL具有不使用'的子句';也不是",&引用;,而是在没有AS语句的情况下工作

MySQL具有不使用'的子句';也不是",&引用;,而是在没有AS语句的情况下工作,mysql,sql,string,group-by,having-clause,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; 很好用。有人能给我一个答案,为什么我做不到 带有“”或“”的HAVING子句,但我必须使用列名 最低工资>800英镑 标识符周围的单引号将其转换为文字字符串。所以这个条件实际上是检查字符串'min

这似乎不起作用,但实际上:

SELECT 
    department_id, ROUND(MIN(salary), 2) AS 'Min Salary'
FROM
    employees
GROUP BY department_id
HAVING 'Min Salary' > 800;
很好用。有人能给我一个答案,为什么我做不到 带有“”或“”的HAVING子句,但我必须使用列名

最低工资>800英镑

标识符周围的单引号将其转换为文字字符串。所以这个条件实际上是检查字符串
'minsalary'
是否大于800。当转换为一个数字时,
“最低工资”
变为
0
,小于
800
。这不是你所期望的

另外,请注意,MySQL将双引号视为单引号,而在其他一些数据库(如Oracle或Postgres)中,双引号用于引用标识符

如果您想要一个包含空格的标识符,那么您需要使用backticks,这就是MySQL引用标识符的方式。因此:

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

或者您可以
设置sql\u mode=ANSI\u QUOTES
,然后使用双引号作为标识符分隔符。或者,更好的是,不要在表/列名中包含空格
SELECT department_id, ROUND(MIN(salary), 2) AS `Min Salary`
FROM employees
GROUP BY department_id
HAVING `Min Salary` > 800;