我怎样才能找到狗最多的人
select *
from person p1
where p1.id in (
select p2.id
from person p2
where p1.id = p2.id
having count(dogs > (
select p3.id ...etc
我是在正确的轨道上还是不行?
谢谢你看看
答案 0 :(得分:4)
订购它们并占据第一行:
SELECT *
FROM person
ORDER BY dogs DESC
LIMIT 1
请注意,仅获取第一行varies depending on your database的方法。
由于您没有指定数据库,这只是一个示例。对于SQL Server,您将改为使用 SELECT TOP 1
。
现在我看到你已经更新了你的问题。对于Oracle,您可以使用ROWNUM。
SELECT *
FROM
(
SELECT *
FROM person
ORDER BY dogs DESC
) WHERE rownum = 1
答案 1 :(得分:4)
这个怎么样?
select *
from person
where dogs = (select max(dogs) from person)
可能不是最有效的方式,但这会给你那些狗数最多的人(或多个人)。如果你只想要其中一个,你可以这样做:
select top 1
from person
order by dogs desc
答案 2 :(得分:1)
假设DOGS是关于PERSONS的专栏,使用rank()
分析函数是最干净的方法。按DOGS降序排序意味着狗数最多的人的等级为1。
select * from
( select p.*
rank() over (order by p.dogs desc) as rnk
from person p )
where rnk = 1
/
rank()
的优势在于,如果两个人为最多的狗打成两排,则会返回两行。根据业务逻辑,这通常是理想的结果。如果你真的必须有一行,你需要更强的分区条件或更精细的订购标准。或者,分析row_number()
保证返回一行,如果你没有讨论你获得的绑定记录中的哪一个。
Oracle具有强大的分析功能。 Find out more