我有一個名為 player.db 的資料庫
這些資料庫有兩個表。
表稱為人,另一個稱為匹配。
人表是
| Player_ID | 播放器 | 國家 |
|---|---|---|
| 1 | 萊昂內爾·梅西 | 阿根廷 |
| 2 | 路易斯·蘇亞雷斯 | 烏拉圭 |
| 3 | 內馬爾 | 巴西 |
匹配表是
| 匹配_ID | 游戲 | Player_ID | 日期 | 季節 |
|---|---|---|---|---|
| 1 | 烏拉圭-巴拉圭 | 2 | 2019 年 5 月 3 日 | 1 |
| 2 | 烏拉圭-智利 | 2 | 2019 年 3 月 19 日 | 1 |
| 3 | 阿根廷-智利 | 1 | 22/3/2019 | 1 |
| 4 | 巴西-圭亞那 | 3 | 2019 年 3 月 4 日 | 1 |
| 5 | 巴西-美國 | 3 | 2020 年 1 月 6 日 | 2 |
| 6 | 巴西-伯利茲 | 3 | 2020 年 3 月 7 日 | 2 |
| 7 | 巴西-蘇里南 | 3 | 2020 年 5 月 7 日 | 2 |
| 8 | 阿根廷-美國 | 1 | 2020 年 8 月 8 日 | 2 |
| 9 | 阿根廷-加拿大 | 1 | 2021 年 3 月 3 日 | 3 |
| 10 | 阿根廷-格林納達 | 1 | 2021 年 8 月 3 日 | 3 |
| 11 | 烏拉圭-蘇里南 | 2 | 2021 年 7 月 4 日 | 3 |
| 12 | 烏拉圭-墨西哥 | 2 | 2/2/2022 | 4 |
| 13 | 烏拉圭-牙買加 | 2 | 2022 年 4 月 2 日 | 4 |
| 14 | 巴西-厄瓜多爾 | 3 | 2022 年 5 月 2 日 | 4 |
我的資料透視表應該如下所示:
| 季節 | 播放器 |
|---|---|
| 1 | 路易斯·蘇亞雷斯 |
| 2 | 內馬爾 |
| 3 | 萊昂內爾·梅西 |
| 4 | 路易斯·蘇亞雷斯 |
我想要一個 sql 代碼,它創建一個資料透視表,顯示哪個球員在哪個賽季的最高分上打得最多。例如,路易斯·蘇亞雷斯在第 1 季中出現的次數最多。
我開始用 sql 編碼,但沒有得到想要的解決方案
SELECT Player_ID, COUNT(*)FROM match GROUP BY Player_ID HAVING COUNT(*) max
問題是我遇到了一個錯誤,它沒有創建一個資料透視表來顯示哪個球員在哪個賽季打得最多。
uj5u.com熱心網友回復:
您的子句HAVING count(*) max可能會導致錯誤。
解決方案可能取決于您使用的關系資料庫。這是 postgresql 的解決方案:
SELECT DISTINCT ON (Season)
m.season, p.player, count(*) AS count
FROM match AS m
INNER JOIN player AS p ON p.player_ID = m.Player_ID
GROUP BY m.Season, p.Player_ID, p.player
ORDER BY m.Season ASC, count DESC
見dbfiddle
uj5u.com熱心網友回復:
加入表格,按賽季和球員分組以獲取每個球員的比賽次數,并使用FIRST_VALUE()視窗函式選擇每個賽季的頂級球員:
SELECT DISTINCT m.Season,
FIRST_VALUE(p.Player) OVER (PARTITION BY m.Season ORDER BY COUNT(*) DESC) Player
FROM match m INNER JOIN person p
ON p.Player_ID = m.Player_ID
GROUP BY m.Season, m.Player_ID;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/519828.html
