SQL - 计算WHERE AGGREGATE> 1

And*_*ill 2 sql informix aggregate

想象一下,我有一个包含{id,username,firstname,lastname}的客户的数据库表

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

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

   firstname | count(*)
   ====================
   bob       |   1
   jeff      |   2
   adam      |   5
Run Code Online (Sandbox Code Playgroud)

如何计算多次出现的名字数量?在伪sql中它将是这样的:

select
    COUNT(
        firstname,
        count(*) as num_occurrences
    )
from 
    Customers 
group by 2 
having num_occurrences > 1;
Run Code Online (Sandbox Code Playgroud)

Wel*_*bog 5

你有正确的想法:

SELECT COUNT(*)
FROM (
  SELECT firstname
  FROM Customers
  GROUP BY firstname
  HAVING COUNT(*) >= 2
)
Run Code Online (Sandbox Code Playgroud)

子查询计算多次出现的名字.然后你算上所有这些名字.该HAVING子句允许您按聚合过滤.它就像一个WHERE子句,除了你可以使用聚合函数.