Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL finding person条目的狗数最多_Sql_Oracle_Plsql - Fatal编程技术网

SQL finding person条目的狗数最多

SQL finding person条目的狗数最多,sql,oracle,plsql,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 我是在正确的轨道上,还是这行不通? 感谢您的浏览订购并乘坐第一排: SELECT * FROM person ORDER BY dog

人(身份证、狗)

我怎么才能找到养狗最多的人呢

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
我是在正确的轨道上,还是这行不通?
感谢您的浏览

订购并乘坐第一排:

SELECT *
FROM person
ORDER BY dogs DESC
LIMIT 1
请注意,仅获取第一行的方法

因为您没有指定数据库,所以这只是一个示例。对于SQL Server,您可以使用
选择TOP 1

现在我看到你已经更新了你的问题。对于Oracle,您可以使用

这个怎么样

select *
from person
where dogs = (select max(dogs) from person)
可能不是最有效的方法,但这会给你的人(或人)有最大的狗计数。如果您只想要其中一个,您可以这样做:

select top 1 
from person
order by dogs desc

假设狗是关于人的专栏,使用
rank()
分析函数是最干净的方法。按狗降序意味着拥有最多狗的人排名为1

select * from
   ( select p.*
            rank() over (order by p.dogs desc) as rnk
     from person p )
where rnk = 1
/
rank()
的优点是,如果两个人拴在一起的狗最多,那么两排狗都会返回。根据业务逻辑,这通常是一个理想的结果。若您真的必须有一行,那个么您需要更强的分区条件或更精细的排序条件。或者,如果您不担心您得到的是哪一条绑定记录,那么解析
row\u number()
保证返回一行


Oracle具有一系列强大的分析功能

您使用的是哪个数据库?它的oracle数据库,效率并不重要,因为它相当小(几百个条目),非常感谢回复的
限制
不是有效的oraclesyntax@APC:语法因数据库而异。我会更新我的答案,提到这一点。
select * from
   ( select p.*
            rank() over (order by p.dogs desc) as rnk
     from person p )
where rnk = 1
/