首页 文章

SQL嵌套聚合分组错误

提问于
浏览
0

我正在寻找已销售最大单位的产品名称,我有两张 table ,购买和产品,产品有pname和pid,购买有pid,数量(销售单位) . 我已经成功了

select p.pname, sum(q.qty) from purchases q
inner join products p on p.pid=q.pid
where p.pid=q.pid
group by p.pname
order by sum(q.qty) desc

我的结果是按降序排列,但我只需要最畅销的单位,多个产品可以拥有最畅销的单位 . 我用的时候

max(sum(q.qty))

我得到分组错误 .

3 回答

  • 0

    一种方法是首先使用公共表表达式导出值 .

    简单地说,您无法将聚合包装在其他聚合中 . 但是,您可以围绕分析包装聚合 .

    with cte as (select p.pname, sum(q.qty) from purchases q
    inner join products p on p.pid=q.pid
    where p.pid=q.pid
    group by p.pname
    order by sum(q.qty) desc)
    Select pname, max(purchases)
    from cte
    group by pname
    
  • 0

    您可以使用 cte 来执行此操作 .

    1)首先获得每个产品的总数量2)然后获得所有这些总数的最大值3)用原始查询加入它

    with totals as (select pid, sum(qty)  totalqty from purchases group by pid)
    , t1 as (select p.pid, p.pname, sum(q.qty) totqty
             from purchases q
             inner join products p on p.pid=q.pid
            group by p.pname) 
    , t2 as (select max(totalqty) maxtotal from totals)
    select pname, totqty
    from t1 
    join t2 on t1.totqty = t2.maxtotal
    
  • 0

    Google Analytics可以为您简化此操作 . 如果你有多个产品具有相同的总和(数量)并且恰好是max(sum(qty)),那么这应该是你得到它们:

    select pname, quantity
    FROM (
    select p.pname
         , sum(q.qty) quantity
         ,rank() over (order by sum(q.qty desc) ranking
    from purchases q
     inner join products p on p.pid=q.pid
    group by p.pname
    )
    where ranking = 1
    

相关问题