Postgresql 识别一个热门频道的SQL

Postgresql 识别一个热门频道的SQL,postgresql,Postgresql,我有一段时间被问到这个问题,我正在努力解决它。如果给出一个假设的表格,您如何确定一个热门的WonderYouTube频道,其中75%的浏览量来自一个视频?下面是我的代码,但我不确定它是否正确。请记住,如果您愿意,您可以添加/删除假设表中的任何内容,例如添加新列 youtube_表 频道名称 意见 视频名称 Beast先生 125943320 以1美元的价格出售房屋 3blue1brown 7753923 但比特币究竟是如何运作的呢? 确定一个热门的WonderYouTube频道,其中75%的浏览

我有一段时间被问到这个问题,我正在努力解决它。如果给出一个假设的表格,您如何确定一个热门的WonderYouTube频道,其中75%的浏览量来自一个视频?下面是我的代码,但我不确定它是否正确。请记住,如果您愿意,您可以添加/删除假设表中的任何内容,例如添加新列

youtube_表

频道名称 意见 视频名称 Beast先生 125943320 以1美元的价格出售房屋 3blue1brown 7753923 但比特币究竟是如何运作的呢? 确定一个热门的WonderYouTube频道,其中75%的浏览量来自一个视频

选择频道名称
从youtube_表
按1分组
最大(视图)>=总(视图)*.75;
确定一个热门的WonderYouTube频道,其中75%的浏览量来自一个视频

选择频道名称
从youtube_表
按1分组
最大(视图)>=总(视图)*.75;

我觉得您需要更真实的样本数据

CREATE TABLE youtube_table(
   channel_name VARCHAR(100) NOT NULL
  ,views        BIGINT  NOT NULL
  ,video_name   VARCHAR(200) NOT NULL
);
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('Mr Beast',125943320,'Selling Houses For $1');
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('Mr Beast',1259,'Selling Houses For $10');
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('3blue1brown',17753923,'But how does bitcoin actually work?');
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('3blue1brown',8753923,'But how does forex actually work?');
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('3blue1brown',4753923,'But how do shares actually work?');
然后,下面将找到总频道百分比大于75的视频

select
*
from (
select
  channel_name
, video_name
, views as video_views
, sum(views) over(partition by channel_name) as channel_views
, (views * 100.0) / sum(views) over(partition by channel_name) channel_view_pct
from youtube_table
) as yt
where channel_view_pct > 75.0
结果将是:

+--------------+-----------------------+-------------+---------------+---------------------+
| channel_name |      video_name       | video_views | channel_views |  channel_view_pct   |
+--------------+-----------------------+-------------+---------------+---------------------+
| Mr Beast     | Selling Houses For $1 |   125943320 |     125944579 | 99.9990003539572751 |
+--------------+-----------------------+-------------+---------------+---------------------+
要添加“一炮打响奇迹”的限制,请执行以下操作:


作为演示@dbfiddle提供

我觉得您需要更真实的样本数据

CREATE TABLE youtube_table(
   channel_name VARCHAR(100) NOT NULL
  ,views        BIGINT  NOT NULL
  ,video_name   VARCHAR(200) NOT NULL
);
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('Mr Beast',125943320,'Selling Houses For $1');
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('Mr Beast',1259,'Selling Houses For $10');
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('3blue1brown',17753923,'But how does bitcoin actually work?');
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('3blue1brown',8753923,'But how does forex actually work?');
INSERT INTO youtube_table(channel_name,views,video_name) VALUES ('3blue1brown',4753923,'But how do shares actually work?');
然后,下面将找到总频道百分比大于75的视频

select
*
from (
select
  channel_name
, video_name
, views as video_views
, sum(views) over(partition by channel_name) as channel_views
, (views * 100.0) / sum(views) over(partition by channel_name) channel_view_pct
from youtube_table
) as yt
where channel_view_pct > 75.0
结果将是:

+--------------+-----------------------+-------------+---------------+---------------------+
| channel_name |      video_name       | video_views | channel_views |  channel_view_pct   |
+--------------+-----------------------+-------------+---------------+---------------------+
| Mr Beast     | Selling Houses For $1 |   125943320 |     125944579 | 99.9990003539572751 |
+--------------+-----------------------+-------------+---------------+---------------------+
要添加“一炮打响奇迹”的限制,请执行以下操作:


以@dbfiddle

演示的形式提供,暂时忘记SQL。想想算法吧。你会怎么做?每个视频的浏览量除以总浏览量如何?先忘掉SQL。想想算法吧。你会怎么做?每个视频的#视图除以总视图如何?