Playerbase有3列:PlrName,TeamTag,Score我需要根据TeamTag对球员进行排序。并将综合得分最高的团队放在上面。
所以想要弄清楚什么查询将有助于实现这一点:
PlrName|TeamTag|Score PlrName|TeamTag|Score
-------------------------------------------------------
Player1|TeamThr|0 Player6|TeamThr|9 \
Player2|TeamTwo|2 Player1|TeamThr|0 > 9
Player3|TeamOne|4 Player4|TeamThr|0 /
Player4|TeamThr|0 Player5|TeamOne|4 \
Player5|TeamOne|4 became-> Player3|TeamOne|4 > 8
Player6|TeamThr|9 Player8|TeamOne|0 /
Player7|TeamTwo|2 Player2|TeamTwo|2 \
Player8|TeamOne|0 Player7|TeamTwo|2 > 6
Player9|TeamTwo|2 Player9|TeamTwo|2 /添加:使用此查询,我可以获得一个数组(?)在按团队得分排序的TeamTag中:
SELECT TeamTag FROM Playerbase GROUP BY team ORDER BY SUM(Score) DESC
使用这个“数组”对..can进行排序,然后执行PlayerBase?在一个查询中:)我还需要获得完整的行(使用*),而不仅仅是三个字段。
发布于 2019-07-29 17:00:35
如果您的数据库管理系统不支持窗口函数(低于8.0的任何MySQL版本):
SELECT PlrName, TeamTag, Score FROM table a
LEFT JOIN
(SELECT PlrName, TeamTag, Score ,SUM(score) ts FROM table GROUP BY TeamTag) b
ON a.TeamTag=b.TeamTag
ORDER BY b.ts DESC, a.TeamTag, score DESC;发布于 2019-07-29 14:43:13
尝尝这个
; with cte as (
select TeamTag, sum(Score) as Sum
from tablename)
select t.PlrName, t.teamtag, t.Score from tablename as t inner join cte as c
on t.teamtag=c.teamtag order by c.sum desc, t.score desc发布于 2019-07-29 14:51:33
假设您的dbms支持窗口函数
select PlrName, TeamTag, Score
from (
select PlrName, TeamTag, Score, sum(Score) over (partition by TeamTag) ms
from tablename ) t
order by ms desc, TeamTag, Score desc编辑将max()更改为sum(),因为OP改进了问题的解释。
https://stackoverflow.com/questions/57248322
复制相似问题