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

时间:2019-01-28 10:12:21

标签: sql rank

我正在尝试从SQL中找出最常查看的类型,这是一个很新的问题,所以我不确定在RANK,COUNT和/或SUM之间使用哪种逻辑。

所以我有三列:ID,seller_type和view_count

androidx.constraintlayout:constraintlayout:2.0.0-alpha3

基本上,我有一个表,其中有一个ID,一个卖方类型和一个ID的视图数。唯一ID与同一卖方可以有多行(因为它们可以是不同的星期/天)。我想做的是,例如,计算在第1周内哪个Seller_type对ID 33的观看次数最多。在这种情况下,卖方(54 + 45),而不是市场(12)。

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

+----+-------------+------------+--------+-------+
| 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 |
+----+-------------+------------+--------+-------+

所以我有了子查询A中每个ID的每个卖方的总数,我想在主查询中使用CASE来指示选择最大total_views的卖方类型。但是我不知道该如何写案例。

任何评论/表示将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分:0)

如果我做对了,您想获取每周观看次数最多的卖方类型。您可以为此使用rank()row_number()。使用rank(),如果有多个具有相同顶视图计数的记录,您将获得所有顶记录。在这种情况下,将rank()替换为row_count()的{​​{1}}仅(随机)选择其中一个记录。

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;

答案 1 :(得分:0)

您似乎基本上想要聚合:

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