Здравствуйте,
У меня есть 3 таблицы:
CREATE TABLE `invoice` (
`id` int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `invoice` (`id`) VALUES
(1),
(2),
(3);
CREATE TABLE `invoice_deduction` (
`id` int(11) NOT NULL,
`invoiceId` int(11) NOT NULL,
`deductionId` int(11) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (`invoiceId`) REFERENCES `invoice` (`id`),
FOREIGN KEY (`deductionId`) REFERENCES `invoice` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `invoice_deduction` (`id`, `invoiceId`, `deductionId`) VALUES
(1, 2, 1),
(2, 3, 1),
(3, 3, 2);
CREATE TABLE `invoice_item` (
`id` int(11) NOT NULL,
`invoiceId` int(11) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (`invoiceId`) REFERENCES `invoice` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `invoice_item` (`id`, `invoiceId`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 2),
(5, 2),
(6, 3),
(7, 3),
(8, 3);
Например:
- Первый счет-фактура содержит 3 позиции (всего: 3 позиции)
- Второй счет-фактура содержит 3 позиции из первого счета-фактуры (вычет) и 2 новых позиции (всего: 5 позиций)
- Третий счет содержит 3 элементы из первого счета-фактуры (вычет), 2 элемента из второго счета-фактуры (вычет) и 3 новых элемента (всего: 8 элементов)
Поэтому я хочу получить запрос с таким результатом:
id | count of items (with deductions)
3 | 8
2 | 5
1 | 3
Я начинаю с этого запроса:
SELECT
i.id, COUNT(*) as countItems
FROM
invoice i JOIN invoice_item it ON i.id = it.invoiceId
GROUP BY
it.invoiceId
ORDER BY
countItems
DESC
Заранее благодарю за помощь.