我有以下情况,我想订购表格并按最高与最低金额的组排列
name score
----------------
abc 10
pqr 9
abc 7
pqr 3
abc 10
xyz 7
pqr 7
xyz 3
xyz 2
现在,如果我们观察,
总(abc)= 10 + 7 + 10 = 27
总计(pqr)= 9 + 3 + 7 = 19总(xyz)= 7 + 3 + 2 = 12
如何按最高总和的组对SQL
中的上表进行排序,它应该显示单个条目?
Expected output:
----------------
name score
----------------
abc 10
abc 10
abc 7
pqr 9
pqr 7
pqr 3
xyz 7
xyz 3
xyz 2
答案 0 :(得分:5)
SQLite没有分析/窗口函数,因此您需要自己计算出不同的数据。
SELECT
yourTable.*
FROM
yourTable
INNER JOIN
(
SELECT name, SUM(score) AS score FROM yourTable GROUP BY name
)
AS totalScores
ON totalScores.name = yourTable.name
ORDER BY
totalScores.score DESC,
yourTable.name,
yourTable.score DESC
在此查询中,有一个子查询。子查询计算每个名称的totalScore。
然后,您可以将该总分放在ORDER BY子句中。注意,我不会在我的结果中选择总分,但是没有必要。
另外,我把名字放在ORDER BY中。通过这种方式,如果存在多个名称共享相同总分的平局,则首先按字母顺序显示名称。
答案 1 :(得分:1)
如果您使用SQL-Server,则一种方法是使用SUM(score)OVER(PARTITION BY name)
SELECT name,
score,SUM(score)OVER(PARTITION BY name)
FROM dbo.TableName
ORDER BY SUM(score)OVER(PARTITION BY name) DESC,
score DESC