我有一張這樣的桌子
| 國家 | 性別 | 播放器 | 分數 | 年 |
|---|---|---|---|---|
| 德國 | 男性 | 邁克爾 | 14 | 1990 |
| 奧地利 | 男性 | 西蒙 | 13 | 1990 |
| 德國 | 女性 | 米拉 | 16 | 1990 |
| 奧地利 | 女性 | 西蒙娜 | 15 | 1990 |
這是資料庫中的一個表。它顯示了全球 70 個國家的球員姓名和性別。它顯示了哪個球員在哪一年進了多少球。年份從 1990 年到 2015 年。所以這張桌子很大。現在我想知道從2010年到2012年,每年哪個女選手和哪個男選手得分最高。
我期望這個:
| 性別 | 播放器 | 分數 | 年 |
|---|---|---|---|
| 男性 | 邁克爾 | 24 | 2010 |
| 男性 | 西蒙 | 19 | 2011 |
| 男性 | 米洛斯 | 19 | 2012 |
| 女性 | 馬拉 | 16 | 2010 |
| 女性 | 西蒙娜 | 16 | 2011 |
| 女性 | 達尼亞 | 17 | 2012 |
我使用了該代碼,但出現錯誤
SELECT gender,year,player, max(score) as score from (football) where player = max(score) and year in ('2010','2011','2012') group by 1,2,3
足球是表名
uj5u.com熱心網友回復:
with main as (
select
gender,
player,
year,
sum(score) as total_score -- incase each player played multiple match in a year
from <table_name>
where year between 2010 and 2012
group by 1,2,3
),
ranking as (
select *,
row_number(total_score) over(partition by year, gender order by total_score desc) as rank_
)
select
gender,
player,
year,
total_score
from ranking where rank_ = 1
- 過濾年份
- 首先,您添加總分,以確保您涵蓋同一球員在同一年參加多場比賽的情況
- 然后你根據年份、性別和總分創建一個排名,所以對于給定的年份和給定的性別創建一個排名
- 然后你過濾 rank_ = 1 因為它代表最高分
uj5u.com熱心網友回復:
如果您使用 sqlite 3.25 或更高版本,您可以使用 dense_rank 函式來實作此目的。
詢問
select t.* from(
select *, dense_rank() over(
partition by year, gender
order by score desc
) as rn
from football
where year in ('2010','2011','2012')
) as t
where t.rn = 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/525568.html
標籤:sqlsqlite
下一篇:sql命令找出多少玩家得分多少
