首页 > 解决方案 > 按 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 时的数量相加,然后计算每个人在第一个和第二个数量之间的差异。最后,我需要查询以根据该差异对个人进行排序。

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

标签: mysqlselect

解决方案


以此表为源

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


推荐阅读