【问题标题】:Error when adding ORDER BY in Select Query在选择查询中添加 ORDER BY 时出错
【发布时间】:2014-09-26 05:26:21
【问题描述】:
select 
    distinct on (productid)p.product,
    pb.productid, 
    pb.mrp,
    pb.ptr,
    pb.ssr,
    pt.patent
from  prod_batch pb
    inner Join  prod_patent pt using(patentid) 
    inner Join  prods p using(productid)  
where(qty - iqty) > 0 

此选择正确返回并得到我真正想要的。!
当在上面添加ORDER BY选择 根据product 的名称进行排序
我以前是这样写的。。

select 
    distinct on (productid)p.product,
    pb.productid, 
    pb.mrp,
    pb.ptr,
    pb.ssr,
    pt.patent
from  prod_batch pb
    inner Join  prod_patent pt using(patentid) 
    inner Join  prods p using(productid)  
where(qty - iqty) > 0 
order by 
    product -- this is my column name to order by 

执行此操作时出错

错误:SELECT DISTINCT ON 表达式必须匹配初始 ORDER BY 表达式

【问题讨论】:

    标签: sql postgresql sql-order-by distinct


    【解决方案1】:

    你可以这样试试

    选择 - 1

    select * from (
    select 
        distinct on (productid)p.product,
        pb.productid, 
        pb.mrp,
        pb.ptr,
        pb.ssr,
        pt.patent
    from  prod_batch pb
        inner Join  prod_patent pt using(patentid) 
        inner Join  prods p using(productid)  
    where(qty - iqty) > 0 
    order by 
        product
    ) t order by product
    

    选择 - 2

    With cte as (
    select 
            distinct on (productid)p.product,
            pb.productid, 
            pb.mrp,
            pb.ptr,
            pb.ssr,
            pt.patent
        from  prod_batch pb
            inner Join  prod_patent pt using(patentid) 
            inner Join  prods p using(productid)  
        where(qty - iqty) > 0 
    
    ) select * from cte order by product
    

    选择 - 3

    只需将您的选择放入视图中

    create or replace view pro_details as 
    select 
        distinct on (productid)p.product,
        pb.productid, 
        pb.mrp,
        pb.ptr,
        pb.ssr,
        pt.patent
    from  prod_batch pb
        inner Join  prod_patent pt using(patentid) 
        inner Join  prods p using(productid)  
    where(qty - iqty) > 0 
    

    用法:select * from pro_details order by product

    【讨论】:

    • 选择选项 3
    【解决方案2】:

    DISTINCT ON (表达式 [, ...] ) 仅保留给定表达式计算结果为相等的每组行的第一行。 [...] 请注意,除非使用 ORDER BY 来确保所需的行首先出现,否则每组的“第一行”是不可预测的。 [...] DISTINCT ON 表达式必须匹配最左边的 ORDER BY 表达式。

    尝试关注

    select 
         distinct on (productid)p.product,
         pb.productid, 
         pb.mrp,
         pb.ptr,
         pb.ssr,
         pt.patent
    from  prod_batch pb
    inner Join  prod_patent pt using(patentid) 
    inner Join  prods p using(productid)  
    where(qty - iqty) > 0 
    order by 
         p.productid,p.product
    

    【讨论】:

      【解决方案3】:
      add table aliase with field "product"
      
      select 
          distinct on (productid)p.product,
          pb.productid, 
          pb.mrp,
          pb.ptr,
          pb.ssr,
          pt.patent
      from  prod_batch pb
          inner Join  prod_patent pt using(patentid) 
          inner Join  prods p using(productid)  
      where(qty - iqty) > 0 
      order by 
          p.product
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-27
        • 2021-06-23
        • 1970-01-01
        • 2017-03-11
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        • 2015-12-01
        相关资源
        最近更新 更多