最高/最低值,而无需在SQL
问题描述:
使用集合函数我已经已经以下数据最高/最低值,而无需在SQL
DNO DNAME SALARY
20 EE 30000
10 DoC 50000
30 ITS 20000
我想选择与最大和最小薪水雇员WITHOUT使用GROUP
功能或顶部 - 正分析名为department
表,或NOT EXISTS
命令。任何帮助将不胜感激。谢谢
答
最大。工资:
SELECT *
FROM department d1
WHERE salary > ALL (SELECT d2.salary
FROM department d2
WHERE d2.dno <> d1.dno)
对于分钟工资:
SELECT *
FROM department d1
WHERE salary < ALL (SELECT d2.salary
FROM department d2
WHERE d2.dno <> d1.dno)
两种解决方案都假设工资不能为空
答
set nocount on
declare @table table (
val int
)
insert @table values (17)
insert @table values (31)
insert @table values (8)
insert @table values (79)
insert @table values (25)
insert @table values (13)
select * from @table
select * from @table t where 1 = (select count(distinct val) from @table where t.val >= val)
select * from @table t where 1 = (select count(distinct val) from @table where t.val <= val)
答
你可以只是加入做到这一点,如果你不想使用任何更复杂的操作员。
SELECT *
FROM SO.dbo.MaxNoAgg mna1
LEFT JOIN SO.dbo.MaxNoAgg mna2 ON (mna2.salary > mna1.salary)
WHERE mna2.mna_id IS NULL;
这基本上会给你没有更高薪水的行存在的行。当然,它仍然会给出所有具有最大值的行(SELECT DISTINCT mna1.salary
)。
为什么你想要这个? – 2012-03-04 11:02:30
面试问题,我猜? – 2012-03-04 11:03:27
仅用于研究目的 – user841852 2012-03-04 11:03:29