3

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

如果我想找出有多少不同名字的实例,我可以这样做:

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

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

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

select
    COUNT(
        firstname,
        count(*) as num_occurrences
    )
from 
    Customers 
group by 2 
having num_occurrences > 1;
4

3 回答 3

6

你有正确的想法:

SELECT COUNT(*)
FROM (
  SELECT firstname
  FROM Customers
  GROUP BY firstname
  HAVING COUNT(*) >= 2
)

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

于 2009-09-02T17:09:13.840 回答
2

不需要子查询。

尝试:

SELECT firstname, COUNT(*)
  FROM Customers
 GROUP BY firstname
HAVING COUNT(*) > 1
 ORDER BY firstname

或者,按最具代表性的名称排序:

SELECT firstname, COUNT(*) AS custcount
  FROM Customers
 GROUP BY firstname
HAVING COUNT(*) > 1
 ORDER BY custcount DESC;
于 2009-09-02T17:12:42.117 回答
1

这会做到:

select count(username)
  from (select username
          from Customers
         group by username
        having count(*) > 1);
于 2009-09-02T17:06:59.883 回答