所以我的任务是编写一些SQL查询,这些查询涉及在不使用聚合函数的情况下查找分组中的最高值或最低值。例如,我有下表:
年龄:
Name Age
John 21
Bill 30
Laura 19
Timothy 23
Victoria 29
假设我想查询表格中最老的人(在本例中为Bill),而不使用聚合函数(即计数,组等等)
编辑我也无法在查询中使用分组!在我的第一篇文章中,我没有明确区分,道歉= /
我遇到了麻烦:
SELECT name
FROM Ages
WHERE Ages.Age IN (
SELECT a1.Age
FROM Age a1, Age a2
WHERE a1.Age > a2.Age);
显然我的查询在这里并不好......我想知道是否有人可以指向一个有用的SQL函数或逻辑片段,可以帮助我进行这种类型的查询。
感谢您的帮助。
答案 0 :(得分:1)
试试这个:
SELECT TOP 1 WITH TIES Name, Age
FROM...
ORDER BY Age ASC
SELECT TOP 1 WITH TIES Name, Age
FROM...
ORDER BY Age DESC
答案 1 :(得分:1)
答案 2 :(得分:1)
如果您对使用分析功能没有任何限制,可以使用此功能。
select Name,
Age
from
(
select Name,
Age,
rank() over(order by Age desc) rn
from Ages
) T
where rn = 1
答案 3 :(得分:0)
您可以使用子查询和ORDER BY
操作。 TOP
对SQL Server有效,但对所有RDBMS无效:
SELECT Name
FROM Ages
WHERE Age = (SELECT Top 1 AGE
FROM Ages
ORDER BY AGE DESC)
答案 4 :(得分:0)
这是一个非常奇怪的要求(不能使用聚合),所以我有一个非常奇怪的解决方案:
select name,
(select top 1 age from your_table where name=MAIN.name order by age desc) as older,
(select top 1 age from your_table where name=MAIN.name order by age) as newer
from your_table MAIN
答案 5 :(得分:0)
这也应该有效:
select * from t
where not exists (
select * from t as t2
where t2.age > t.age
) or not exists (
select * from t as t2
where t2.age < t.age
)