我想对订单的数量进行分组,以显示有多少客户拥有该数量的订单。

我想出了:

select count(*) as quantidade_pedidos, clientes.id
from pedidos
inner join clientes
on pedidos.cliente_id = clientes.id
where pedidos.aprovado = 1
group by quantidade_pedidos


但我还是不能按'quantidade_pedidos'分组。

有什么办法可以按临时列分组吗?这样做的另一种方式?显示有多少客户(数量)下了订单数量?


已下达8个订单-> 3个客户已下达8个订单
等等

最佳答案

您原来的查询是错误的。您需要按clientes.id分组:

select count(*) as quantidade_pedidos, c.id
from pedidos p inner join
     clientes c
     on p.cliente_id = c.id
where p.aprovado = 1
group by c.id;


在聚合查询中,未聚合的列位于group by中,而不位于聚合的列中。

还要注意,表别名使查询更易于编写和阅读。

至于第一行中的问题,请使用子查询:

select quantidade_pedidos, count(*)
from (select count(*) as quantidade_pedidos, c.id
      from pedidos p inner join
           clientes c
           on p.cliente_id = c.id
      where p.aprovado = 1
      group by c.id
     ) x
group by quantidade_pedidos;


但是,鉴于问题中的查询不起作用,因此我不确定这是您真正想要的。

09-13 06:52