【问题标题】:How to select multiple columns without duplicates in one column in Oracle如何在Oracle中的一列中选择多个不重复的列
【发布时间】:2011-09-26 18:39:25
【问题描述】:

问题: 我需要为供应商找到顶级客户。 顶级客户在所有订单上拥有最大项目总和。 如果供应商有 2 个顶级客户,那么顶级客户将具有最小订单 ID,这意味着 - 谁首先创建订单并获得最大项目 - 它将是顶级客户。 我正在写这个 sql 代码:

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/

【问题讨论】:

    标签: oracle oracle10g


    【解决方案1】:

    您需要对订单数量和 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 代码得到这个:imageshack.us/photo/my-images/98/23702547.jpg 谢谢你的帮助。
    • 排名应该只针对每个供应商分区(而不是按供应商、客户分区)。我已经编辑了 APC 的查询。
    • 我发现错误,在你的 sql 代码 10. 行需要删除 ', c_id'。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2018-03-26
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    相关资源
    最近更新 更多