Добро пожаловать в SO
Существует способ без подзапроса для достижения этой цели. Это математически:)
Поскольку вы работаете с двумя таблицами, вы получите результат, умноженный на идентификаторы, на продукт. Так что просто разделите сумму на количество названий продуктов, разделенных на уникальные идентификаторы, соответствующие этим продуктам:)
Так что-то вроде этого поможет:
Схема (MySQL v5.7)
CREATE TABLE INPUT (
`ID` INTEGER,
`productName` VARCHAR(9),
`QTY` INTEGER,
`buyPrice` INTEGER,
`sellPrice` INTEGER
);
INSERT INTO INPUT
(`ID`, `productName`, `QTY`, `buyPrice`, `sellPrice`)
VALUES
('1', 'dress 007', '2', '700', '1400'),
('2', 'shirt 001', '4', '800', '1900'),
('3', 'dress 007', '10', '700', '1500'),
('4', 'dress 007', '6', '900', '2900'),
('5', 'shirt 001', '2', '750', '1600'),
('6', 'hat 008', '2', '300', '600');
CREATE TABLE OUTPUT (
`ID` INTEGER,
`productName` VARCHAR(9),
`QTY` INTEGER
);
INSERT INTO OUTPUT
(`ID`, `productName`, `QTY`)
VALUES
('1', 'dress 007', '4'),
('2', 'shirt 001', '2'),
('3', 'dress 007', '1'),
('4', 'dress 007', '1'),
('5', 'shirt 001', '3');
Запрос № 1
SELECT I.productName,
SUM(I.QTY)/(COUNT(I.productName)/count(distinct I.ID))
as "SUM(QTY)INPUT",
O.productName,
SUM(O.QTY)/(COUNT(O.productName)/count(distinct O.ID))
as "SUM(QTY)OUTPUT"
FROM INPUT I
LEFT OUTER JOIN OUTPUT O ON I.productName = O.productName
GROUP BY I.productName
ORDER BY 2 DESC;
| productName | SUM(QTY)INPUT | SUM(QTY)OUTPUT | productName |
| ----------- | ------------- | -------------- | ----------- |
| dress 007 | 18 | 6 | dress 007 |
| shirt 001 | 6 | 5 | shirt 001 |
| hat 008 | 2 | null | null |
https://www.db -fiddle.com / ж / Dp7yaNkVf3JW2DZrrvL7G / 1 * 1 021 *