想象一下,我有一个包含{id,username,firstname,lastname}

的客户的数据库表

如果我想找到有多少个不同名字的实例我可以做:

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

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

如何编写相同的查询以仅返回多次出现的名字?即在上面的例子中只返回jeff和adam的行。

有帮助吗?

解决方案

您希望具有子句,如下所示:

select 
    firstname,
    count(*) 
from Customers 
group by firstname
having count(*) > 1
order by 1

其他提示

我应该说,

group by 2 order by 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