我一直在嘗試使用 LEFT OUTER JOIN、GROUP BY 和(失敗)來使用 CONCAT || 函式來獲得十年中最好的書的最高分,但沒有運氣找出兩本書在同一個十年中何時獲得相同的最高分。
我需要下面的輸出:

有2張桌子:
表 1:bookName Schema:uniqueBookNameId、BookName、yearPublished(從 1901 年到 2022 年)
表 2:bookRating 模式:uniqueBookNameId, bookRating
uj5u.com熱心網友回復:
使用 CTE 連接表格并使用RANK()視窗函式對書籍進行排名。
然后過濾結果得到每個十年的頂級書籍:
WITH cte AS (
SELECT r.bookRating,
n.BookName,
n.yearPublished / 10 * 10 || 's' AS Decade,
RANK() OVER (PARTITION BY n.yearPublished / 10 * 10 ORDER BY r.bookRating DESC) AS rnk
FROM bookName n INNER JOIN bookRating r
ON r.uniqueBookNameId = n.uniqueBookNameId
)
SELECT DISTINCT bookRating, BookName, Decade
FROM cte
WHERE rnk = 1
ORDER BY Decade;
或者:
WITH cte AS (
SELECT r.bookRating,
n.BookName,
n.yearPublished / 10 * 10 || 's' AS Decade,
RANK() OVER (PARTITION BY n.yearPublished / 10 * 10 ORDER BY r.bookRating DESC) AS rnk
FROM bookName n INNER JOIN bookRating r
ON r.uniqueBookNameId = n.uniqueBookNameId
)
SELECT bookRating, GROUP_CONCAT(DISTINCT BookName) AS BookName, Decade
FROM cte
WHERE rnk = 1
GROUP BY Decade
ORDER BY Decade;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511653.html
上一篇:SQLite3記錄格式與檔案不同
下一篇:SQLite:使用聯合優化查詢
