3

我有以下情况,我想订购表格并按总和最高到最低的组排列

 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
4

2 回答 2

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 中。这样,如果有多个姓名共享相同总分的平局,则将首先显示按字母顺序排列的姓名。

于 2013-06-10T10:32:43.373 回答
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

演示

OVER 子句 (Transact-SQL)

于 2013-06-10T10:27:56.977 回答