Mysql 如何在SQL中按汇总分数对团队进行排序?(使用SUM()进行两列排序)
Mysql 如何在SQL中按汇总分数对团队进行排序?(使用SUM()进行两列排序),mysql,sorting,Mysql,Sorting,Playerbase有3列:PlrName,TeamTag,Score 我需要按TeamTag对玩家进行分组排序。并将总结得分最高的团队放在上面 因此,想知道什么查询有助于实现这一点: PlrName|TeamTag|Score PlrName|TeamTag|Score ------------------------------------------------------- Player1|TeamThr|0 Player6|TeamThr|9 \
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
数组(?):
按团队顺序按总和(分数)说明从Playerbase组中选择团队标签
…然后我可以使用此“数组”排序PlayerBase
?在一个查询中预设:)
我还需要得到完整的行(使用*),而不仅仅是三个字段。试试这个
; 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
假设您的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
EDIT将
max()
更改为sum()
,因为OP改进了问题解释。如果您的dbms不支持窗口功能(8.0以下的任何MySQL版本):
我是这样做的,但是对sql:D有点不舒服
SELECT * FROM `Playerbase` as T1
JOIN
(SELECT TeamTag, SUM(Score) AS Sum FROM `Playerbase` GROUP BY TeamTag ORDER BY Sum DESC) AS T2
ON T2.TeamTag = T1.TeamTag
虽然没有达到我想要的效果,但无论如何,谢谢你的回答。他们帮助我了解了更多:D这一代码不假设特定团队得分的总和,对吗?
SELECT * FROM `Playerbase` as T1
JOIN
(SELECT TeamTag, SUM(Score) AS Sum FROM `Playerbase` GROUP BY TeamTag ORDER BY Sum DESC) AS T2
ON T2.TeamTag = T1.TeamTag