我有一张这样的桌子:
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时,我需要对每个个体的数量求和,然后计算每个个体第一个和第二个数量之间的差值。最后,我需要查询来按这种差异对个体进行排序。
当然,我编写的查询不起作用。
发布于 2019-10-24 04:04:32
以此表为源
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由于我不知道您的所有数据,所以最好使用左连接,它将包括在groupY中没有对应组的所有唯一的groupX成员。如果使用right join,则相反
请参阅此处的示例https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=6c2facaaf6564d4025f24f6aab35adf7
https://stackoverflow.com/questions/58528646
复制相似问题