#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