【发布时间】:2022-06-21 16:19:49
【问题描述】:
问题是:
获取观看次数最多的 5 个播客,如果timeDuration > 29s 则计算每次收听(仅收录活跃歌曲)。每 29 秒将计为 1 次,因此它将基于 PodcastID 计数。 1 个多集播客,1 个多集播客。
我认为我使用了错误的条件,所以它不能得到我想要的。
这是我尝试过的:
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次)
这是我想要的结果,但只获得前 5 个结果,虽然我选择了前 (5) 个,但图中是 6 个结果..
【问题讨论】:
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或键入问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
你展示的数据是你的结果还是你的样本数据?无论哪种方式,我们都需要一个完整的minimal reproducible example,其中包含示例数据、所需结果以及您的查询。
-
我们需要查看您的表格以了解问题所在。也许您的联接中的某些东西会造成问题。尝试第一次删除前 5 名,看看是否有重复的歌曲。如果您确实收到重复的歌曲,请尝试删除您的加入,看看它会如何表现
-
请发布完整的表结构和数据,如果我们看不到,则无法复制
-
Count 将简单地计算聚合中的行数。我认为这不是你想要的。听起来您想使用 sum(r.TimeDuration) / 29 或类似的东西。由于没有样本数据或所需的输出,这实际上只是一个猜测。
标签: sql sql-server