根据 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 top
或 limit
)。
我正在尝试从我的 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 top
或 limit
)。