我有 2 張桌子:
- 任務(2列:玩家,任務)
- 維度任務(2 列:任務、訂單)
任務 維度_任務
對于所有玩家,我希望有最高“順序”列的任務。我想要所有 3 列(玩家、任務、訂單)
預期產出
請注意,任務在維度表中具有唯一的“訂單”值。我無法真正匯總任務字串。
我能做的就是這個
SELECT player, max(dim.order) FROM quests qu
LEFT JOIN dimension_quest dim ON qu.quest = dim.quest
GROUP BY player
然后使用 dimension_quest 再次加入以獲得任務名稱。但是有沒有更好的方法可以在聚合查詢中直接獲取任務名稱,而不是加入 dimension_quest 兩次?
uj5u.com熱心網友回復:
但是有沒有更好的方法可以在聚合查詢中直接獲取任務名稱,而不是加入 dimension_quest 兩次?
不可以。在標準 SQL 中,聚合查詢的選擇串列可能僅指分組列和組的聚合函式。你的quest專欄都不是。
一些 SQL 方言允許在聚合查詢中選擇其他列,但這些方言通常不指定將從每個組的哪一行中選擇這些列的相應值。在某些情況下沒關系,但這不足以滿足您的目的。
uj5u.com熱心網友回復:
這是一種無需使用row_number().
select player, quest, "order"
from (
select player, q.quest, "order"
,row_number() over(partition by player order by "order" desc) as rn
from quests q join dimension_quest dq on dq.quest = q.quest
) t
where rn = 1
| 播放器 | 尋求 | 命令 |
|---|---|---|
| 約翰 | 任務2 | 3 |
| 彼得 | 使命1 | 2 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/515072.html
標籤:sql加入聚合函数
上一篇:如何在python中將串列的每三個(或更多)元素合并為一個?
下一篇:如何從SQL中的顯示中排除列
