問題是:
獲取觀看次數最多的 5 個播客,如果timeDuration > 29s(僅收錄活躍歌曲),則計算每次收聽。每 29 秒將計為 1 次,因此它將基于 PodcastID 計數。我認為我使用了錯誤的條件,所以它不能得到我想要的。
這是我嘗試過的:
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 個結果。

抱歉,我是 StackOverFlow 的新手,所以我展示問題和資料示例的方式可能有點難以理解。請原諒我。
uj5u.com熱心網友回復:
如果我理解正確,那么報告行的意思是,有人在播客中聽了音樂。該行包含以秒為單位的持續時間,您希望將其視為 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 Server 將順便應用整數除法。如果您想使用分數,請除以 29.0 而不是 29。這可能會導致每個播客的總時間要高得多。
我正在使用該WITH TIES子句,這在查找前 n 行時很常見。如果您想將此限制為五個結果行,您可能必須從完整的頂部串列中任意選擇行,然后洗掉該子句。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479628.html
下一篇:回傳所有子記錄的最深祖先的特定列
