如何在Oracle中的一列中选择多个列没有重复项
问题描述:
问题: 我需要找到供应商的顶级客户端。 顶级客户拥有所有订单上的最大项目总和。 如果供应商有2个顶级客户,那么顶级客户将使用最小订单ID,这意味着 - 谁先创建订单并获得最大物品 - 将成为顶级客户。 我在写这个SQL代码:如何在Oracle中的一列中选择多个列没有重复项
select s.s_id, c.c_id, min(o.o_id), count(*)
from suppliers s, clients c, orders o, items i
where s.s_id=c.id_s and c.c_id=o.id_c and o.o_id=i.id_o
group by s.s_id, c.c_id
order by 4 desc, 3
,并得到这样的结果:http://imageshack.us/photo/my-images/148/32969388.jpg/
,但我需要得到:http://imageshack.us/photo/my-images/842/51815927.jpg/
答
您需要排名顺序计数和ID。所以你应该使用分析和内联视图。例如:
select s_id
, c_id
, min_order_id
, no_of_orders
from (
select s_id
, c_id
, min_order_id
, no_of_orders
, rank() over (partition by s_id
order by no_of_orders DESC, min_order_id ASC) rnk
from (
select s.s_id
, c.c_id
, min(o.o_id) as min_order_id
, count(*) as no_of_orders
from suppliers s, clients c, orders o, items i
where s.s_id=c.id_s and c.c_id=o.id_c and o.o_id=i.id_o
group by s.s_id, c.c_id
)
)
where rnk=1
/
对不起,你的SQL代码得到这个:http://imageshack.us/photo/my-images/98/23702547.jpg/谢谢你的帮助。 – user963601
所有行的排名均为1 – user963601
排名仅适用于每个供应商分区(而不是供应商,客户端分区)。我已经编辑了APC的查询。 –