在SQL中计算“唯一”重复项

时间:2017-07-22 20:20:55

标签: sql

我对SQL很陌生。

当我有这样的列表时

+----+------+
| id | name |
+----+------+
| 1  | Mike |
+----+------+
| 1  | Mike |
+----+------+
| 2  | Mike |
+----+------+
| 2  | Mike |
+----+------+
| 2  | Mike |
+----+------+
| 5  | Sam  |
+----+------+
| 6  | Sam  |
+----+------+
| 7  | Sam  |
+----+------+
| 7  | Sam  |
+----+------+

我想知道有多少独特的Mikes和Sams。所以输出将是

+------+---+
| Mike | 2 |
+------+---+
| Sam  | 3 |
+------+---+

我该怎么做?

编辑:

这只是我问题的一个例子。代码类似于SELECT id,name FROM id,name WHERE some conditions

我尝试了类似SELECT id,name,COUNT(*)from id,name WHERE一些条件GROUP BY id,name

并且输出不是我想要的。它只计算有多少Mikes和Sams。但我想要有多少独特的Mikes和Sams

1 个答案:

答案 0 :(得分:1)

SELECT name, COUNT(DISTINCT id) AS cnt
FROM mytable
GROUP BY name
HAVING COUNT(DISTINCT id) > 1

您的数据库服务器的语法可能会有所不同,但该点将相同:计算每个名称的唯一ID值的数量,过滤那些具有多个名称的值。

如果您的数据库服务器没有COUNT DISTINCT

SELECT name, COUNT(*) AS cnt
FROM (SELECT DISTINCT id, name
      FROM mytable)
GROUP BY name
HAVING COUNT(*) > 1