我有一个mysql表(我们称之为“user”),包含大约700000行数据。假设这里有一个小样本:
UserID DeptID Name Score
1 2 Bob 50
2 2 Bob 100
3 3 Jane 32
4 4 Jill 93
5 2 Bob 50
6 3 Jane 58
7 7 Jane 44
我想显示具有重复'name'和'deptid'的所有行,但只显示不同的'score'(userid与选择无关,它只需要显示。)
UserID DeptID Name Score
1 2 Bob 50
2 2 Bob 100
3 3 Jane 32
6 3 Jane 58
所以基本上你可以从上面看到,我不想显示得分为50的另一个bob(userid5)(即使他在dept2)。
我有如下所示的查询工作的一部分,除了它显示所有的bob的,我不知道如何让它只显示哪里的分数是不同的。
SELECT A.UserID, A.DeptID, A.Name, A.Score
FROM User AS A
INNER JOIN (
SELECT Name, DeptID
FROM User
GROUP BY Name, DeptID
HAVING COUNT(*) > 1
) AS B ON A.Name = B.Name AND A.DeptID = B.DeptID
此查询在相当长的时间内运行。我尝试过的其他方法要么给出不正确的结果,要么查询出错,要么查询永远运行,最后我终止了进程。
我知道我错过了一些简单的东西,但我很难看清它是什么。。。。
编辑-好吧,巴玛的答案正是我想要的,谢谢(我想我只是盯着我的sql语句看了太久,哈哈)
不过,这里有一个新的转折点。我只想它显示一个特定的人,如果有2个(或更多)不同的分数(在同一个部门)。例如,如果只有两个bob都有50个(100个不存在),那么两个bob都不会显示。
1条答案
按热度按时间vsikbqxv1#
添加
GROUP BY A.Name, A.Score
最后,你只会得到一个名字和分数的每一个组合行。如果你只想显示同一个部门有两个不同的分数,那么使用
COUNT(DISTINCT Score)
而不是COUNT(*)
.