Как работает поиск max с помощью> = all? - PullRequest
0 голосов
/ 29 декабря 2018

Я хочу найти максимальное количество из таблицы и узнать, как это делается, используя все.Но я просто не понимаю, как это работает.Например, когда вы говорите, что count ()> = all (выберите количество () остальной части запроса), то это просто означает, что если число не больше, чем все из них, то оно может быть равно им?например, как это возможно, если в подзапросе содержится более одного значения?

Вот мой код

select 
    m.name,
    count(*) 
from 
    manufacturer m 
    inner join products p on m.code=p.manufacturer
group by m.name,m.code
having count(*)<=all(
    select count(*) 
    from manufacturer m
    inner join products p on m.code=p.manufacturer 
    group by m.code
);

1 Ответ

0 голосов
/ 29 декабря 2018

С документация :

Условие сравнения ALL используется для сравнения значения со списком или подзапросом.Ему должно предшествовать =,! =,>, <, <=,> =, За которым следует список или подзапрос.

Когда за условием ALL следует список, оптимизатор расширяет исходное условие довсе элементы списка и их строки вместе с операторами AND

В вашем случае вы бы хотели:

... having count(*) >= all(select count(*) ...

Вместо:

... having count(*) <= all(select count(*) ...

Это вернет элемент, чье количество равно максимально возможному значению (или более чем одному элементу, если есть верхние связи).

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

select * from (
    select m.name,count(*) cnt
    from 
        manufacturer m 
        inner join products p 
            on m.code=p.manufacturer 
    group by m.name,m.code
    order by 2 desc
) where rownum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...