SQL: Нахождение минимального агрегата с использованием только количества - PullRequest
2 голосов
/ 17 марта 2020

Я использую DB2 для проекта и ищу, в какой группе меньше всего членов, без использования функции min . Моя идея состоит в том, чтобы найти все группы, а затем вычесть любую группу, в которой больше членов из какой-либо другой группы, оставив меня в группе, в которой не больше членов, чем в любой другой группе, т.е.

Пока у меня есть

SELECT DISTINCT P.group as Group, count(P.id) as Count
FROM People P
EXCEPT
SELECT P.group, count(P.id) 
FROM People P, People O
WHERE count(P.cid) > count(O.cid);

Со схемой для таких людей, как

create table People (
    group  varchar(25)  not null,
    id   smallint     not null,
);

Я получаю следующую ошибку:

SQL0119N Выражение, начинающееся с «CLUB», указанного в предложении SELECT, предложении HAVING или предложении ORDER BY, не указано в предложении GROUP BY или в выражении SELECT, предложении HAVING или предложении ORDER BY с функцией столбца и без Предложение GROUP BY указано. SQLSTATE = 42803

Если бы вы могли указать, что я делаю неправильно или правильный формат для такого запроса, это было бы очень полезно!

Ответы [ 2 ]

1 голос
/ 17 марта 2020

найти, в какой группе наименьшее количество членов

Вы можете агрегировать по группам, упорядочивать по количеству членов и извлекать только верхнюю строку:

select p.group as grp, count(*) as cnt
from people p
group by p.group
order by count(*)
fetch first 1 rows only
0 голосов
/ 17 марта 2020

Вы должны попытаться использовать min (). Очень прямо вперед. Из вашего сообщения об ошибке кажется, что ваше предложение HAVING неверно, поэтому оно будет смотреть на это.

...