вычитание между двумя запросами с группировкой по - PullRequest
0 голосов
/ 13 января 2020

Я использую MariaDB и имею две таблицы (orders, invoiced_positions), и мне нужно рассчитать, сколько из каждого элемента было выставлено и оплачено. Поэтому мне нужно посчитать строки и группы по item_name. Проблема в том, что некоторые пункты открываются заново, поэтому мне нужно вычесть количество повторно открытых счетов из тех, которые не были. В основном: я хочу сделать для всех элементов, чего я достиг здесь только для одного элемента:

SELECT  
(SELECT COUNT(item_name = 'Streuselkuchen') 
 FROM orders, invoiced_positions 
 WHERE order_id = id AND reopened = 0)
 - (SELECT COUNT(item_name = 'Streuselkuchen') 
    FROM orders, invoiced_positions 
    WHERE order_id = id AND reopened != 0) AS Difference;

Я думаю, что этого можно достичь с помощью условной агрегации, как показано здесь но я не смог применить это к моей конкретной задаче c.

1 Ответ

1 голос
/ 13 января 2020

Вам нужны правильные JOIN таблиц, GROUP BY item_name, а затем условное агрегирование:

SELECT item_name, SUM(reopened = 0) - SUM(reopened != 0) AS Difference
FROM orders AS O INNER JOIN invoiced_positions AS IP  
ON IP.order_id = O.id     
GROUP BY item_name;    

Я не квалифицировал столбцы item_name и reopened с псевдонимами таблиц, потому что это Не очевидно, где они принадлежат, но вы должны это сделать.

...