sql - 按总和最高的组对表进行排序并显示单个条目

标签 sql sqlite group-by sql-order-by

我有以下场景,我想对表格进行排序并按总和从高到低的组排列

 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

最佳答案

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 中。这样,如果有多个名字的总分相同,则按字母顺序排在第一位的名字会显示在最前面。

关于sql - 按总和最高的组对表进行排序并显示单个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17021659/

相关文章:

mysql - 避免大数据集中的N+1查询

php - 如何计算 SQL 中每个值的表行数?

SQL UNION ALL 查询返回日期字段中的所有 Null 值

sql - 如何防止 SQLite 中的触发器递归?

c++ - Qt Sqlite 仅从脚本创建一张表

python-3.x - IndexError : index 43462904 is out of bounds for size 43462904

c# - lambda 表达式中的 SQL double 'IN' 子句

ruby-on-rails - Gemfile中的更改未反射(reflect)在Gemfile.lock中

LINQ:日期时间字段中按月和年分组

PHP MySQL : COUNT/SUM a non integer column with different values