接收';未知列';密集秩';在';其中第'条;在MySQL工作台中出错

接收';未知列';密集秩';在';其中第'条;在MySQL工作台中出错,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子句时: SEL

第一次贴在这里,所以我想先感谢大家的帮助

我试图对表的记录进行排序,并使用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”。“where子句”中的未知列“densite_Rank”


我尝试了不同的方法来获得成功;省略backticks并使用不同的别名,使用HAVING代替WHERE-no-luck。Plz-halp.

您需要使用子查询

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

您需要使用子查询

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

不能在
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

不能在
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

不能在
where
子句中使用列别名。使用子查询。不能在
where
子句中使用列别名。使用子查询。奇怪的是,当我使用have时,我收到了完全不同的错误消息:错误代码:3594。在此上下文中,不能使用包含窗口函数的表达式的别名'Dense_Rank'。奇怪的是,当我使用have时,我收到了一条完全不同的错误消息:错误代码:3594。在此上下文中,不能使用包含窗口函数的表达式的别名“Dense_Rank”。“妈的,工作得很好-谢谢!你介意解释一下为什么它需要在子查询中吗?或者将我指向要阅读的源的方向?Reektheunbroken,因为在标准SQL中,您将无法在WHERE子句中引用列的别名。这就是为什么你可以使用子查询。天哪,那工作得很好-谢谢!你介意解释一下为什么它需要在子查询中吗?或者将我指向要阅读的源的方向?Reektheunbroken,因为在标准SQL中,您将无法在WHERE子句中引用列的别名。这就是为什么可以使用子查询。