我想对订单的数量进行分组,以显示有多少客户拥有该数量的订单。
我想出了:
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;
但是,鉴于问题中的查询不起作用,因此我不确定这是您真正想要的。