В SQL-запросе у человека больше всего собак - PullRequest
2 голосов
/ 08 августа 2010

человек (id, собаки)

как мне найти человека с наибольшим количеством собак

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 ]

4 голосов
/ 08 августа 2010

Как насчет этого?

select *
from person
where dogs = (select max(dogs) from person)

Вероятно, не самый эффективный способ, но это даст вам человека (или людей), которые имеют наибольшее количество собак.Если вам нужен только один из них, вы можете сделать это:

select top 1 
from person
order by dogs desc
4 голосов
/ 08 августа 2010

Закажите их и возьмите первую строку:

SELECT *
FROM person
ORDER BY dogs DESC
LIMIT 1

Обратите внимание, что способ получения только первой строки зависит от вашей базы данных .

Поскольку вы не указали свою базу данных, это всего лишь пример.Для SQL Server вы должны использовать SELECT TOP 1.

Теперь я вижу, что вы обновили свой вопрос.Для Oracle вы можете использовать ROWNUM .

SELECT *
FROM
(
    SELECT *
    FROM person
    ORDER BY dogs DESC
) WHERE rownum = 1
1 голос
/ 09 августа 2010

Предполагая, что СОБАКИ - это столбец для ЛИЦ, использование аналитической функции 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 обладает мощным набором аналитических функций. Узнайте больше .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...