#mysql #sql
#mysql #sql
Вопрос:
Впервые публикую здесь, поэтому я хотел бы заранее поблагодарить всех за их помощь.
Я пытаюсь ранжировать записи таблицы и дополнительно указать выходные данные, используя предложение WHERE. Однако я получаю сообщение об ошибке, указанное в заголовке моего поста.
SELECT Name, Gender, Salary,
RANK() OVER (ORDER BY Salary DESC) AS `Rank`,
DENSE_RANK() OVER (ORDER BY salary DESC) AS `Dense_Rank`
FROM employees
;
Выдает результат, видимый здесь. Проще простого.
Когда я затем добавляю предложение WHERE:
SELECT Name, Gender, Salary,
RANK() OVER (ORDER BY Salary DESC) AS `Rank`,
DENSE_RANK() OVER (ORDER BY salary DESC) AS `Dense_Rank`
FROM employees
WHERE `Dense_Rank` = 2
;
Я получаю ‘Код ошибки: 1054. Неизвестный столбец ‘Dense_Rank’ в ‘предложении where’
Я пробовал разные методы, чтобы получить результат; опуская обратные ссылки и используя другой псевдоним, используя HAVING вместо WHERE — безуспешно. Пожалуйста, подождите.
Комментарии:
1. Вы не можете использовать псевдоним столбца в
where
предложении. Используйте подзапрос.
Ответ №1:
Вам нужно использовать подзапрос;
Select * from
(
SELECT Name, Gender, Salary,
RANK() OVER (ORDER BY Salary DESC) AS `Rank`,
DENSE_RANK() OVER (ORDER BY salary DESC) AS `Dense_Rank`
FROM employees
) X
WHERE `Dense_Rank` = 2
Комментарии:
1. Черт возьми, это сработало отлично — спасибо! Вы не могли бы объяснить, почему это должно было быть в подзапросе? Или укажите мне направление источника для чтения?
2. Reektheunbroken, потому что в стандартном SQL вы не сможете ссылаться на псевдоним столбца в предложении WHERE. Вот почему вы можете использовать подзапрос.
Ответ №2:
Вы не можете использовать псевдоним столбца в where
предложении. MySQL расширяет использование having
, поэтому вы можете использовать это:
SELECT Name, Gender, Salary,
RANK() OVER (ORDER BY Salary DESC) AS `Rank`,
DENSE_RANK() OVER (ORDER BY salary DESC) AS `Dense_Rank`
FROM employees
HAVING `Dense_Rank` = 2
Комментарии:
1. Как ни странно, когда я использовал HAVING, я получил совершенно другое сообщение об ошибке: Код ошибки: 3594. Вы не можете использовать псевдоним ‘Dense_Rank’ выражения, содержащего функцию window в этом контексте.’