Порядок с разницей в два выбора в MySQL - PullRequest
0 голосов
/ 23 октября 2019

У меня есть такая таблица:

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, а затем вычислять разницу длякаждый человек между первым и вторым количеством. Наконец, мне нужен запрос, чтобы упорядочить людей по этой разнице.

Конечно, написанный мной запрос не работает.

1 Ответ

1 голос
/ 23 октября 2019

С этой таблицей в качестве источника

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

Поскольку я не знаю всехваши данные, может быть, лучше использовать левое соединение, которое будет включать все уникальные члены группы X, у которых нет соответствующей группы в группе Y. С правым соединением это наоборот

Смотрите пример здесь https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=6c2facaaf6564d4025f24f6aab35adf7

...