mysql - 按 MySQL 中两个选择的差异排序
问题描述
我有一张这样的桌子:
groupX groupY quantity
A B 10
A C 2
C D 7
B A 13
C B 1
D B 9
因此,相同的个人出现在 groupX 和 groupY 列。我想编写一个 Select 来实现以下功能:
Select
(Select groupX, sum(quantity) group by groupX) as M
- (Select groupY, sum(quantity)
group by groupY) as N
ORDER BY M-N Desc
我的意思是,我需要将每个人出现在 groupX 和 groupY 时的数量相加,然后计算每个人在第一个和第二个数量之间的差异。最后,我需要查询以根据该差异对个人进行排序。
当然,我写的查询不起作用。
解决方案
以此表为源
CREATE TABLE tableA
(`groupX` varchar(1), `groupY` varchar(1), `quantity` int)
;
INSERT INTO tableA
(`groupX`, `groupY`, `quantity`)
VALUES
('A', 'B', 10),
('A', 'C', 2),
('C', 'D', 7),
('B', 'A', 13),
('C', 'B', 1),
('D', 'B', 9)
;
你得到这个声明
SELECT T1.groupX groupname, (sum1 - sum2) as res
From
(SELECT groupX ,Sum(quantity) sum1 From tableA Group by groupX) T1
inner join (SELECT groupY,Sum(quantity) sum2 From tableA Group by groupY) T2
On T1.groupX = T2.groupY
ORDER by res;
你会得到
groupname res
B -7
A -1
D 2
C 6
由于我不知道您的所有数据,因此最好使用左连接,这将包括 groupX 中在 groupY 中没有相应组的所有唯一成员。右连接反之亦然
请参阅此处的示例https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=6c2facaaf6564d4025f24f6aab35adf7
推荐阅读
- python-3.x - 如何在 Python 3 上实现元路径导入器
- php - 使用 Encore、Slim 和 Twig 进行资产版本控制/浏览器缓存破坏
- macos - IntelliJ IDEA 无法在 macOS Catalina 上打开项目或添加 SDK
- scala - 将 Scala Future[Seq[X]] 与 Seq[Future[Y]] 组合生成 Future[(X,Seq[Y])]
- javascript - 从 iPad 创建画布图像
- mysql - 我可以只存储主键吗?
- python - 如何使用 for 循环为具有数字列的数据框打印条件唯一值
- python - 从脚本执行 runpy.run_path 时出错
- javascript - 如何防止在滚动发生之前将类添加到标题中
- python - 当 allow_pickle=False 时,nlpnet POSTagger 返回错误消息