社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

mysql在一列上匹配重复项,而在另一列上只匹配不同项

jason • 5 年前 • 1538 次点击  

我有一个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  DeptID  Name    Score
1       2       Bob     50
2       2       Bob     100
3       3       Jane    32
6       3       Jane    58

所以基本上你可以从上面看到,我是 想给另一个bob(用户id 5)显示50分(即使他在部门2)。

我的部分查询如下所示,只是它显示了所有的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语句看太久了,哈哈)

不过,这是一个新的转折点。我 只有 想让它显示一个特别的人 如果 有两个(或更多)不同的分数(在同一个部门内)。例如,如果只有两个鲍伯的两个都有50个(100个不存在),那两个都不会显示。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47175
 
1538 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Barmar
Reply   •   1 楼
Barmar    6 年前

添加 GROUP BY A.Name, A.Score 到最后,你只能得到一行的名字和分数的每个组合。

如果你只想在同一个部门有两个不同的分数时给他们看,用 COUNT(DISTINCT Score) 而不是 COUNT(*) 是的。

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(DISTINCT Score) > 1
) AS B ON A.Name = B.Name AND A.DeptID = B.DeptID
GROUP BY A.Name, A.Score