给定特定值的 SUM,我想订购成对(或 3,4 组等)行。

根据姓名+姓氏+年龄的串联,行是连续的

为了更好地理解给出下表:

ID  Name    Surname Age Salary
------------------------------
1   John    Smith   30  2
2   John    Smith   30  10
3   Rick    James   22  300
4   Rick    James   22  1000
5   Rick    James   22  5
6   Mike    Brown   50  200
7   Mike    Brown   50  20

我想要一个最终表,它应该按每个 Name+Surname+Age 的 Salary 总和排序 DESC,并且尽管 ID 列不同,但保持具有相同 Name+Surname+Age 的行彼此相邻。这将是预期的结果:
ID  Name    Surname Age Salary
------------------------------
3   Rick    James   22  300
4   Rick    James   22  1000
5   Rick    James   22  5
6   Mike    Brown   50  200
7   Mike    Brown   50  20
1   John    Smith   30  2
2   John    Smith   30  10

如您所见,Name+Surname+Age = "Rick Jams 22"的行位于顶部,因为它们的总和为 1305,其次是 "Mike Brown 50"(sum = 220) 和 "John Smith 30"(sum = 12)。
此外,结果表中的行数必须相同。

如何使用 Oracle SQL 做到这一点?

谢谢你的帮助

最佳答案

SELECT  t.*,
        COALESCE(SUM(salary) OVER (PARTITION BY name, surname, age), 0) ss
FROM    mytable t
ORDER BY
        ss DESC

关于sql - 给定一列的总和,对行对/三元组进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36599254/

10-14 12:56