Необработанные данные перед каждой группой
Какие запросы я должен выполнить, чтобы показывать необработанные данные перед каждой группой за строкой? Есть способ сделать это?
User ReceiptNo Price
----- ---------- ------
A 876 100
A 877 50
**150**
B 960 60
B 961 40
**100**
2 ответа
Решение
Большинство баз данных поддерживают стандартную группу по модификаторам, таким как rollup
или же grouping sets
, Если это так, вы можете сделать:
select user, receiptno, sum(price) as price
from t
group by grouping sets ((user, receiptno), (user));
select user, receiptno, price, 1 as order_column
from t
union all
select user, '' as receiptno, sum(price) as price, 2 as order_column
from t
group by user
order by user, order_column
Вы можете объединить результаты с необработанными данными и добавить искусственный столбец, который будет использоваться в ORDER BY для размещения агрегированных строк в конце групп (после необработанных данных).