我对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
答案 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