Предполагая, что СОБАКИ - это столбец для ЛИЦ, использование аналитической функции rank()
- самый чистый подход. Упорядочение по убыванию СОБАК означает, что человек с наибольшим количеством собак имеет ранг 1.
select * from
( select p.*
rank() over (order by p.dogs desc) as rnk
from person p )
where rnk = 1
/
rank()
имеет преимущество в том, что если два человека связывают большинство собак, оба ряда будут возвращены. В зависимости от бизнес-логики это обычно желаемый результат. Если вам действительно нужна одна строка, вам нужно более жесткое условие разделения или более точные критерии упорядочения. В противном случае аналитика row_number()
гарантированно вернет одну строку, если вы не уверены, какую из связанных записей вы получите.
Oracle обладает мощным набором аналитических функций. Узнайте больше .