#oracle #sum #grouping
Вопрос:
У меня есть запрос, в котором я выбираю 4 столбца. И я хочу поместить общую сумму в нижней части одного из столбцов и не группировать ее:
ВЫБЕРИТЕ customer_id, адрес электронной почты, total_amount, дата заказа
ОТ……………….
Я хочу сделать общую сумму TOTAL_AMOUNT внизу, но не беспокоиться о какой-либо группировке. Я не вижу, как это сделать с помощью ГРУППИРОВКИ или СВЕРТКИ. Я надеюсь, что это будет не как какой-либо текущий итог в другом столбце, а как общий итог внизу.
Большое спасибо.
Комментарии:
1. Поскольку в вашем вопросе есть тег oracle , вы можете добиться желаемого с помощью комбинации команд SQL и SQL*Plus . Это приемлемо?
2. Это звучит как что — то вроде вашего приложения или уровня отчетности; но некоторые клиенты могут делать это изначально, включая SQL*Plus, SQLcl и разработчика SQL, но, возможно, и другие.
3. Пожалуйста, вставьте примеры данных.
Ответ №1:
Вы можете добавить строку общего итога с a UNION ALL
и столбцом, чтобы отслеживать, соответствует ли строка общему итогу.
select customer_id, email, total_amount, order_date, 0 is_grand_total
from orders
union all
select null, null, sum(total_amount), null, 1 is_grand_total
from orders
order by is_grand_total, customer_id;
(На мой взгляд, это часто хороший способ добавить логику обобщения в запросы. Я бы предпочел немного более сложное решение с одним языком (SQL), чем решение, включающее два или более языков или приложений.)
Комментарии:
1. Есть ли шанс, что скрипка бд покажет ваш запрос в действии?
2. @Abra, конечно, смотрите мой отредактированный ответ для примера.
Ответ №2:
Простая опция SQL*Plus:
SQL> break on report
SQL> compute sum of sal on report
SQL>
SQL> select deptno, ename, sal
2 from emp
3 where deptno = 10;
DEPTNO ENAME SAL
---------- ---------- ----------
10 CLARK 2450
10 KING 5001
10 MILLER 1300
----------
sum 8751
SQL>