根据 id 的视图获取最常用的类型

Obtain the most used type for an id based on its views

我正在尝试从我的 SQL 中找出观看次数最多的类型,这是很新的,所以我不确定在 RANK、COUNT and/or 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 |
+----+-------------+------------+--------+-------+

基本上我有一个 table,其中有一个 ID、一个卖家类型和一个 ID 的浏览次数。一个唯一 ID 可以有多行显示同一卖家(因为它们可以不同 weeks/days)。例如,我想做的是,计算第 1 周内哪个 seller_type 对 ID 33 的浏览次数最多。在本例中是供应商 (54+45),而不是市场 (12)。

所以我的计划是开始使用 SUM:

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 中每个 ID 的每个卖家的总计,我想在我的主查询中使用一个 CASE 来指示 select 最大 total_views' 卖家类型.但是我不知道如何写我的CASE WHEN。

任何 comments/indications 将不胜感激!

谢谢!

如果我没看错,您希望获得每周浏览量最多的卖家类型。您可以为此使用 rank()row_number()。使用 rank() 如果有多个记录具有相同的最高浏览量,您将获得所有最高记录。在这种情况下,将 row_count()rank() 替换为仅(随机)select 一条记录。

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;

你似乎基本上想要聚合:

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 toplimit)。