首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按MySQL中两个selects的差值排序

按MySQL中两个selects的差值排序
EN

Stack Overflow用户
提问于 2019-10-24 02:03:57
回答 1查看 31关注 0票数 0

我有一张这样的桌子:

代码语言:javascript
复制
groupX    groupY    quantity
A         B         10
A         C         2
C         D         7
B         A         13
C         B         1
D         B         9

因此,相同的个体出现在列groupX和groupY中。我想写一个Select,它实现了以下几点:

代码语言:javascript
复制
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时,我需要对每个个体的数量求和,然后计算每个个体第一个和第二个数量之间的差值。最后,我需要查询来按这种差异对个体进行排序。

当然,我编写的查询不起作用。

EN

回答 1

Stack Overflow用户

发布于 2019-10-24 04:04:32

以此表为源

代码语言:javascript
复制
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)
;

你可以接受这句话

代码语言:javascript
复制
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;

你会得到

代码语言:javascript
复制
groupname  res
B          -7
A          -1
D          2
C          6

由于我不知道您的所有数据,所以最好使用左连接,它将包括在groupY中没有对应组的所有唯一的groupX成员。如果使用right join,则相反

请参阅此处的示例https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=6c2facaaf6564d4025f24f6aab35adf7

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58528646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档