SQL - ГДЕ АГРЕГАТ > 1
Вопрос
Представьте, что у меня есть таблица базы данных клиентов, содержащая {id, имя пользователя, имя, фамилия}
Если я хочу узнать, сколько есть экземпляров с разными именами, которые я могу сделать:
select firstname,count(*) from Customers group by 2 order by 1;
username | count(*)
===================
bob | 1
jeff | 2
adam | 5
Как мне написать один и тот же запрос, чтобы возвращать только имена, встречающиеся более одного раза? в приведенном выше примере возвращаются только строки для Джеффа и Адама.
Решение
Вы хотите, чтобы у было предложение
, например:
select
firstname,
count(*)
from Customers
group by firstname
having count(*) > 1
order by 1
Другие советы
Я должен сказать, что
группировать по 2 порядка по 1
ужасно. Используйте правильные имена столбцов, если это поддерживается: это значительно улучшит читабельность.
Имея это в виду,
select firstname, count(*) c
from Customers
group by firstname
having count(*) > 1 -- Kudos to Shannon
order by c;
Это то, что делает предложение HAVING. Я не уверен, будет ли это работать в Informix, но попробуйте:
select firstname, count(*)
from Customers
group by firstname
HAVING COUNT(*) > 1
Не связан с StackOverflow