Получить наиболее используемый тип для идентификатора на основе его представлений
Я пытаюсь получить наиболее просматриваемый тип из моего 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;