Вопрос

Представьте, что у меня есть таблица базы данных клиентов, содержащая {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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top