SQL - ГДЕ ОБЪЕДИНЯЕТСЯ> 1 - PullRequest
2 голосов
/ 31 июля 2009

Представьте, что у меня есть таблица базы данных клиентов, содержащая {id, имя пользователя, имя, фамилия}

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

select firstname,count(*) from Customers group by 2 order by 1;

   username | count(*)
   ===================
   bob      |   1
   jeff     |   2
   adam     |   5

Как мне написать один и тот же запрос, чтобы вернуть только имена, встречающиеся более одного раза? в приведенном выше примере возвращаются только строки для Джеффа и Адама.

Ответы [ 3 ]

10 голосов
/ 31 июля 2009

Вы хотите предложение having, например:

select 
    firstname,
    count(*) 
from Customers 
group by firstname
having count(*) > 1
order by 1
4 голосов
/ 31 июля 2009

group by 2 order by 1 ужасно, я должен сказать. Используйте правильные имена столбцов, если это поддерживается: это значительно улучшит читабельность.

Имея это в виду,

select firstname, count(*) c 
from Customers 
group by firstname  
having count(*) > 1 -- Kudos to Shannon
order by c;
2 голосов
/ 31 июля 2009

Это то, что делает предложение HAVING. Я не уверен, будет ли это работать в Informix, но попробуйте:

select firstname, count(*) 
from Customers 
group by firstname
HAVING COUNT(*) > 1
...