我正在尝试从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的卖方类型。但是我不知道该如何写案例。
任何评论/表示将不胜感激!
谢谢!
答案 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 top
或limit
)。