我在SQL Server 2012中有EMP表:
CREATE TABLE EMP
(
[ID] INT NOT NULL PRIMARY KEY,
[MGR_ID] INT,
[DEPT_ID] INT,
[NAME] VARCHAR(30),
[SAL] INT,
[DOJ] DATE
)
当我执行此查询时
Select NAME, MAX(SAL) as Salary FROM EMP;
我遇到了这个错误:
Msg 8120,Level 16,State 1,Line 1
列'EMP.NAME'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
请帮忙
P.S。
上述错误的原因可能是NAME
列中有多行,而MAX
聚合函数只返回一行。
评论戈登的回答:
我实际上想要返回薪水第二高的员工姓名
答案 0 :(得分:0)
Select Name, Max(sal) as salary from employee group by Name
因此,当您在sql中使用任何聚合函数(如count,max,min等)时,我们必须从选择列表中指定那些我们想要成为结果集的分组列的列
答案 1 :(得分:0)
如果您希望名称与最高薪水相关联,请使用TOP
和ORDER BY
:
select top 1 name, sal
from employee
order by sal desc;
如果您想要所有值,即使有关系,也请使用TOP WITH TIES
。
答案 2 :(得分:0)
根据您的评论,您希望返回薪水第二高的员工姓名。您需要使用DENSE_RANK
来实现此目的:
;WITH Cte AS(
SELECT *,
RN = DENSE_RANK() OVER(ORDER BY SAL DESC)
FROM UsrLic
)
SELECT
NAME, SAL
FROM Cte
WHERE RN = 2