SQL嵌套聚合分组错误

时间:2015-11-02 17:02:08

标签: sql oracle

我正在尝试找到已售出最大单位的产品名称,我有两张桌子,购买和产品,产品有pname和pid,购买有pid,数量(已售出单位)。 我已经设法了这个

max(sum(q.qty)) 

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

$index

我收到分组错误。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

Google Analytics可以为您简化此操作。如果你有多个产品具有相同的总和(数量)并且碰巧是最大值(总和(数量)),那么这应该是你得到的:

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