Получить наиболее используемый тип для идентификатора на основе его представлений

Я пытаюсь получить наиболее просматриваемый тип из моего SQL, я довольно новый, поэтому я не уверен, какую логику использовать между RANK, COUNT и / или SUM.

Итак, у меня есть три столбца: ID, seller_type и view_count

+----+-------------+------------+--------+-------+
| ID | Seller_type | view_count |  Week  |  Day  |
+----+-------------+------------+--------+-------+
| 33 | Vendor      |         54 | Week1  | Day 1 |
| 33 | Vendor      |         45 | Week1  | Day 2 |
| 33 | Marketplace |         68 | Week2  | Day 4 |
| 33 | Marketplace |         12 | Week2  | Day 2 |
| 32 | Vendor      |         93 | Week2  | Day 3 |
| 33 | Third-party |         74 | Week1  | Day 6 |
| 32 | Third-party |         10 | Week1  | Day 1 |
+----+-------------+------------+--------+-------+

В основном у меня есть таблица, в которой есть идентификатор, тип продавца и количество просмотров для идентификатора. Уникальный идентификатор может иметь более одной строки с одним и тем же продавцом (так как они могут быть разными неделями / днями). Я хочу, например, рассчитать, какой продавец_типа имел наибольшее количество просмотров для ID 33 в течение недели 1. В данном случае это Vendor (54+45), а не Marketplace (12).

Поэтому я планировал начать использовать СУММУ:

WITH A AS (
SELECT
ID
,Seller_type
,SUM(view_count) as Total_views
,Week

FROM Table_A

GROUP BY
ID
,Seller_type
,Week
)

SELECT
CASE WHEN Week = 'Week1' THEN MAX(Total_views)
CASE WHEN Week = 'Week2' THEN

FROM A

Таким образом, у меня есть итоги для каждого продавца для каждого идентификатора в моем подзапросе A, и я хотел использовать CASE в своем основном запросе, чтобы указать, чтобы выбрать тип продавца max total_views. Но я не знаю, как написать мой случай, когда.

Любые комментарии / указания будут оценены!

Спасибо!

2 ответа

Решение

Вы, кажется, в основном хотите агрегацию:

select seller_type, week, sum(view_count)
from t
group by seller_type, week;

Затем вы хотите немного фильтрации и выбрать верхнюю:

select seller_type, week, sum(view_count)
from table_a
where week = 'Week 1'
group by seller_type, week
order by sum(view_count)
fetch first 1 row only;

Обратите внимание, что не все базы данных поддерживают стандарт fetch first пункт - но все поддерживают функциональность в некоторых говорят (скажем, с select top или же limit).

Если я правильно понял, вы хотите получить тип продавца с наибольшим количеством просмотров в неделю. Ты можешь использовать rank() или же row_number() для этого. С rank() Вы получите все верхние записи, если будет более одной записи с одинаковым количеством просмотров. замещать rank() за row_count() только (случайным образом) выбрать одну из записей в таком случае.

WITH
a
...
SELECT id,
       seller_type,
       total_views,
       week
       FROM (SELECT id,
                    seller_type,
                    total_views,
                    week
                    rank() OVER (PARTITION BY week
                                 ORDER BY total_views DESC) r
                    FROM a)
       WHERE r = 1;
Другие вопросы по тегам