oracle一对多数据获取随机一个的问题tmp表中有数据p_id card_id money1 123 201 234 302 124 102 134 50一个p_id有多个对应的card_id.现在要获取p_id下的所有money的总和随机的一个对应的card_id求实现语句.oracle

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 07:29:26

oracle一对多数据获取随机一个的问题tmp表中有数据p_id card_id money1 123 201 234 302 124 102 134 50一个p_id有多个对应的card_id.现在要获取p_id下的所有money的总和随机的一个对应的card_id求实现语句.oracle
oracle一对多数据获取随机一个的问题
tmp表中有数据
p_id card_id money
1 123 20
1 234 30
2 124 10
2 134 50
一个p_id有多个对应的card_id.
现在要获取p_id下的所有money的总和随机的一个对应的card_id
求实现语句.oracle数据库.
结果返回:
p_id card_id money
1 123/234 50 --123或234都可以
2 124/134 60 --124或134都可以

oracle一对多数据获取随机一个的问题tmp表中有数据p_id card_id money1 123 201 234 302 124 102 134 50一个p_id有多个对应的card_id.现在要获取p_id下的所有money的总和随机的一个对应的card_id求实现语句.oracle
方法1:
select p_id,max(card_id) as card_id ,sum(money) as money
from tmp
group by p_id
用这个语句,不过每次取的是最大的card_id.
方法2:
select a.p_id,a.card_id,b.money
from (select p_id,card_id,row_number() over (partition by p_id /* order by COL9*/) as rank
\x05\x05\x05from tmp ) a
\x05\x05 (select p_id,sum(money) as money
\x05\x05\x05from tmp \x05group by p_id) b
where rank=1 and a.p_id=b.p_id
这个语句/* ...*/ 中的语句不知能不能删,我现在不能测试,如果非得要order by ,你把COL9换成一个列名试试.结果会取出一个card_id.