MySQL Предложение HAVING не работает ни с '', ни "", а работает без оператора AS - PullRequest
2 голосов
/ 25 января 2020
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 с помощью '' или "", но вместо этого мне нужно использовать имя столбца?

1 Ответ

3 голосов
/ 25 января 2020

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;
...