С НАКОПИТЕЛЬНЫМ ПАКЕТОМ, не показывающим сумму

#mysql #mariadb

Вопрос:

 SELECT a.Store,
       t.CM 
FROM sales_data a
INNER JOIN (
    SELECT Store, SUM(no_of_bill) AS CM
    FROM cash_memo c
     WHERE c.Bill_Date < '2018-02-28'
    GROUP BY Store
) t USING (Store) 
GROUP BY a.Store WITH ROLLUP
 

дает мне следующий результат:

[результат запроса][1]

Я не уверен, что не так, что я не получаю сумму » CM » при использовании НАКОПИТЕЛЬНОГО пакета

Комментарии:

1. Отметьте свой вопрос в базе данных, которую вы используете. Ваш запрос синтаксически неверен SQL, и поэтому он должен завершиться ошибкой.

Ответ №1:

Накопительный пакет должен быть с group by . Попробуйте это:

 SELECT Store, SUM(no_of_bill) AS CM
FROM cash_memo c
WHERE c.Bill_Date < '2018-02-28'
GROUP BY Store WITH ROLLUP;
 

Ваш запрос должен завершиться ошибкой синтаксиса, поскольку CM он не агрегирован во внешнем запросе и не находится в GROUP BY .

Если бы вы правильно сформулировали логику, это было бы:

 SELECT a.Store, SUM(t.CM)
 

Это сработало бы, и ROLLUP они сделали бы то, что вы ожидаете.

Примечание: JOIN Это кажется ненужным для запроса. Но если вы действительно этого хотите, вы можете просто включить его в приведенный выше запрос без подзапроса.

Комментарии:

1. @BrajeshSharma . . . Есть ли причина, по которой вы отвергли этот ответ?

Ответ №2:

Вы используете GROUP BY во внешнем запросе без какой-либо агрегации.
Соедините 2 таблицы, агрегируйте набор результатов, возвращенный соединением, и используйте ROLLUP :

 SELECT s.Store, SUM(c.no_of_bill) AS CM 
FROM sales_data s INNER JOIN cash_memo c
ON c.Store = s.Store
WHERE c.Bill_Date < '2018-02-28'
GROUP BY s.Store WITH ROLLUP