有没有办法自动递增计数?
Is there a way to count auto-incrementally?
问题是:
获取播放量最多的5个播客,如果timeDuration > 29s
(只取活跃歌曲)则每次收听都算在内。每 29 秒将计为 1 次,因此它将根据 PodcastID 进行计数。 1 个多集播客,1 个多集播客。
我认为我使用的 JOIN 条件错误,所以它无法得到我想要的。
这是我尝试过的:
SELECT TOP (5) E.ID,E.Name,R.PodcastID,
COUNT (R.PodcastID) TIMES
FROM (REPORT R JOIN EPISODE E ON R.PodcastID = E.PodcastID) JOIN
PODCAST P ON P.ID = E.ID
WHERE R.TimeDuration > 29 AND E.Status = 1
GROUP BY E.ID, E.Name,R.PodcastID
ORDER BY TIMES;
这是我创建的 3 个表:
--但是输出,在 TIMES 列,无论我做什么,它们都只算为 1,尽管我已经在上面设置了变量:58s、116s(表示 2、4 次)
这是我想要的结果,但是只得到top5,图中是6个结果,虽然我Select top(5)..
抱歉,我是 Whosebug 的新手,所以我展示问题和数据示例的方式可能有点难以理解。请原谅我。
如果我没理解错的话,报告行的意思是,有人听了播客中的音乐。该行包含以秒为单位的持续时间,您希望将其视为 29 秒的块数。因此,将持续时间除以 29 并使用它。
with listened as
(
select
id as id_podcast,
sum(timeduration / 29) as times,
from report1
where timeduration > 29
group by id
)
select top(5) with ties
p.*, listened.times
from podcast p
join listened on listened.id_podcast = p.id
where p.status = 1
order by listened.times desc;
你加入播客并报告他们的 ID 看起来很奇怪。报告的 ID 应标识报告而不是播客。好吧,我只是像你一样使用它,但创建了一个别名以使其可读。如果这只是您的错误,那么更正它就很容易了。
如果timeduration为整数,SQL服务器会顺便进行整数除法。如果您想使用分数,请除以 29.0 而不是除以 29。这可能会导致每个播客的总时长更高。
我正在使用 WITH TIES
子句,这在查找前 n 行时很常见。如果您想将其限制为五个结果行,您可能必须从完整的顶部列表中任意选择行,然后删除该子句。
问题是:
获取播放量最多的5个播客,如果timeDuration > 29s
(只取活跃歌曲)则每次收听都算在内。每 29 秒将计为 1 次,因此它将根据 PodcastID 进行计数。 1 个多集播客,1 个多集播客。
我认为我使用的 JOIN 条件错误,所以它无法得到我想要的。
这是我尝试过的:
SELECT TOP (5) E.ID,E.Name,R.PodcastID,
COUNT (R.PodcastID) TIMES
FROM (REPORT R JOIN EPISODE E ON R.PodcastID = E.PodcastID) JOIN
PODCAST P ON P.ID = E.ID
WHERE R.TimeDuration > 29 AND E.Status = 1
GROUP BY E.ID, E.Name,R.PodcastID
ORDER BY TIMES;
这是我创建的 3 个表:
--但是输出,在 TIMES 列,无论我做什么,它们都只算为 1,尽管我已经在上面设置了变量:58s、116s(表示 2、4 次)
这是我想要的结果,但是只得到top5,图中是6个结果,虽然我Select top(5)..
抱歉,我是 Whosebug 的新手,所以我展示问题和数据示例的方式可能有点难以理解。请原谅我。
如果我没理解错的话,报告行的意思是,有人听了播客中的音乐。该行包含以秒为单位的持续时间,您希望将其视为 29 秒的块数。因此,将持续时间除以 29 并使用它。
with listened as
(
select
id as id_podcast,
sum(timeduration / 29) as times,
from report1
where timeduration > 29
group by id
)
select top(5) with ties
p.*, listened.times
from podcast p
join listened on listened.id_podcast = p.id
where p.status = 1
order by listened.times desc;
你加入播客并报告他们的 ID 看起来很奇怪。报告的 ID 应标识报告而不是播客。好吧,我只是像你一样使用它,但创建了一个别名以使其可读。如果这只是您的错误,那么更正它就很容易了。
如果timeduration为整数,SQL服务器会顺便进行整数除法。如果您想使用分数,请除以 29.0 而不是除以 29。这可能会导致每个播客的总时长更高。
我正在使用 WITH TIES
子句,这在查找前 n 行时很常见。如果您想将其限制为五个结果行,您可能必须从完整的顶部列表中任意选择行,然后删除该子句。