MySQL - 按客户编号计算的组订单数

时间:2016-06-23 04:19:05

标签: mysql group-by inner-join

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

我想出了:

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

但是我不能按照量化的方式进行分组' quantdade_pedidos'反正。

有没有办法按临时列分组?这样做的另一种方式?显示有多少客户(编号)有这么多订单?

实施例 已下订单8个 - > 3个客户有8个订单 等

1 个答案:

答案 0 :(得分:1)

您的原始查询错误。您需要按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;

在聚合查询中, unaggregated 列位于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;

但鉴于问题中的查询不起作用,我不确定这是你真正想做的事情。