SQL查找人员条目最多的狗

时间:2010-08-08 09:54:31

标签: sql oracle plsql

人(身份证,狗)

我怎样才能找到狗最多的人

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
我是在正确的轨道上还是不行? 谢谢你看看

3 个答案:

答案 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