我想在给定某个值的SUM的情况下对行(或3,4等组)进行排序。
根据Name + Surname + Age
的串联,行是连续的为了更好地理解下表:
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
我希望有一个决赛桌,应该通过每个姓名+姓氏+年龄的工资总和来订购DESC,并且尽管ID列不同,但保持行名称相同+姓氏+年龄相邻。这将是预期的结果:
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
正如你所看到的那样,名字+姓氏+年龄=“Rick Jams 22”的行位于顶部,因为它们的总和将是1305,其次是“Mike Brown 50”(总和= 220)和“John Smith 30” “(总和= 12)。 此外,结果表中的行数必须相同。
如何使用Oracle SQL执行此操作?
感谢您的帮助
答案 0 :(得分:2)
SELECT t.*,
COALESCE(SUM(salary) OVER (PARTITION BY name, surname, age), 0) ss
FROM mytable t
ORDER BY
ss DESC
答案 1 :(得分:1)
试试这个:
SELECT ID, Name, Surname, Age, Salary
FROM (
SELECT ID, Name, Surname, Age, Salary,
SUM(Salary) OVER (PARTITION BY Name, Surname, Age) AS sum_of_sal
FROM mytable) t
ORDER BY sum_of_sal DESC, ID
查询使用SUM
的窗口版本来计算每Name, Surname, Age
分区的工资总和。我们可以在外部查询中使用此字段来进行排序。
答案 2 :(得分:1)
或试试这个
SELECT ID, Name, Surname, Age, Salary
FROM mytable
ORDER BY SUM(Salary) OVER (PARTITION BY Name, Surname, Age) DESC, ID