SQL Двойная группа по запросу - PullRequest
0 голосов
/ 05 января 2020

Мне нужна помощь с запросом SQL.

У меня есть такая таблица.

Example table

In у меня есть таблица продаж. Из таблицы продаж мне нужно получить сумму транзакций одной категории внутри категории. Например, для каждой категории в категории 2 я хотел бы получить верхнюю категорию 1 и сумму продаж.

Чтобы получить такую ​​таблицу:

enter image description here

Я могу сделать это отдельно для каждой категории, но не могу получить таблицу со всеми из них.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 января 2020

Можно использовать ROW_NUMBER или DENSE_RANK также через SUM.

Затем отфильтруйте это вычисленное число.

SELECT 
[Category 2], 
[Category 1] AS [Top Category 1], 
[Sum Of Sales]
FROM
(
    SELECT [Category 2], [Category 1]
    , SUM(t.Sales) AS [Sum Of Sales]
    , DENSE_RANK() OVER (PARTITION BY [Category 2] ORDER BY SUM(t.Sales) DESC) AS Rnk
    FROM YourSalesTable t
    GROUP BY [Category 2], [Category 1]
) q
WHERE Rnk = 1
1 голос
/ 05 января 2020

Вы знаете, как получить итоги по паре категорий. Из них вы хотите показать только верхние строки для категории 2.

Чтобы это произошло, вы можете ранжировать строки с RANK OVER, таким образом, присвоив верхним строкам ранг 1. Чтобы получить только верхние строки, вы бы использовали TOP. Здесь вам нужно предложение WITH TIES, потому что есть несколько строк с одинаковым рангом 1.

select top(1) with ties category2, category1, sum(sales) as total
from mytable
group by category2, category1
order by rank() over (partition by category2 order by total desc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...