我正在尝试从我的SQL中提取浏览量最大的类型,我很新,所以我不确定使用哪种逻辑,排名,计数和/或总和。
所以我有三列: 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,一个卖家类型和一个id的视图数量。一个唯一ID可以有多个具有相同卖家的行(因为它们可以是不同的周/天)。例如,我想要做的是,计算在第一周内ID 33的浏览量最多的seller_type。在这种情况下,供应商(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的每个卖家的总数,并且我想在主查询中使用一个大小写来指示选择最大total_views的卖家类型。但我不知道该怎么写我的案例。
如有任何意见/建议,我们将不胜感激!
谢谢!
发布于 2019-01-28 19:53:24
您似乎基本上想要聚合:
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),所有的数据库都支持该功能。
发布于 2019-01-28 18:37:13
如果我做对了,你想得到每周浏览量最多的卖家类型。为此,您可以使用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;https://stackoverflow.com/questions/54399680
复制相似问题