Необработанные данные перед каждой группой

Какие запросы я должен выполнить, чтобы показывать необработанные данные перед каждой группой за строкой? Есть способ сделать это?

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 для размещения агрегированных строк в конце групп (после необработанных данных).

Другие вопросы по тегам