Oracle SQL*Plus以获取每个不同分支Id值的最高成本维护值
我正试图生成一份报告,说明在Oracle RDBMS中,每个分支中哪个房间的维护成本最高。是否只有通过自联接表才能实现这一点,是否可以通过使用子查询来实现这一结果 维护记录表:Oracle SQL*Plus以获取每个不同分支Id值的最高成本维护值,sql,oracle,max,greatest-n-per-group,Sql,Oracle,Max,Greatest N Per Group,我正试图生成一份报告,说明在Oracle RDBMS中,每个分支中哪个房间的维护成本最高。是否只有通过自联接表才能实现这一点,是否可以通过使用子查询来实现这一结果 维护记录表: ROOM_NO BRANCH_ID COST_MAINT ---------- --------- ---------- 1 B001 23500 2 B001 3750 2 B001 4000 3 B00
ROOM_NO BRANCH_ID COST_MAINT
---------- --------- ----------
1 B001 23500
2 B001 3750
2 B001 4000
3 B001 23000
5 B001 5300
9 B001 25000
43 B002 2500
44 B002 5300
48 B002 3750
49 B002 3000
49 B002 3750
53 B003 4000
56 B003 4000
68 B003 4000
75 B003 25000
85 B004 5800
86 B004 3000
120 B005 25000
预期产出/报告:
ROOM_NO BRANCH_ID COST_MAINT
---------- --------- ----------
9 B001 25000
44 B002 5300
75 B003 25000
85 B004 5800
120 B005 25000
您可以使用
row\u number()
在Oracle中,我建议使用聚合和
keep()
:
:
ROOM_NO | BRANCH_ID | COST_MAINT
------: | :-------- | ---------:
9 | B001 | 25000
44 | B002 | 5300
75 | B003 | 25000
85 | B004 | 5800
120 | B005 | 25000
房间号|分行| ID |成本|维护
------: | :-------- | ---------:
9 | B001 | 25000
44 | B002 | 5300
75 | B003 | 25000
85 | B004 | 5800
120 | B005 | 25000
谢谢你的建议!!这对我很有帮助,我在这里学到了新东西。谢谢你的建议!!这很有帮助,我在这里学到了新东西。
select
max(room_no) keep(dense_rank first order by cost_maint desc) as room_no,
branch_id,
max(cost_maint) as cost_maint
from mytable
group by branch_id
ROOM_NO | BRANCH_ID | COST_MAINT
------: | :-------- | ---------:
9 | B001 | 25000
44 | B002 | 5300
75 | B003 | 25000
85 | B004 | 5800
120 | B005 | 25000