尝试运行此查询时遇到问题:
Select
c.cname as custName,
count(distinct o.orderID) as No_of_orders,
avg(count(distinct o.orderID)) as avg_order_amt
From Customer c
Inner Join Order_ o
On o.customerID = c.customerID
Group by cname;
这是一条错误消息:#1111 (HY000) - Invalid use of group function
我只想选择每个客户,查找每个客户有多少订单,并平均每个客户的订单总数。我认为在查询中可能存在太多聚合的问题。
答案 0 :(得分:1)
问题是如果你想计算一个计数的平均值,你需要有两个单独的分组,所以这个表达式是无效的:
avg(count(distinct o.orderID))
现在很难理解你究竟是什么意思,但听起来好像你只想用avg(o.amount)
代替。
[edit]我现在看到你的添加,所以虽然错误仍然相同,但解决方案会稍微复杂一些。您需要的最后一个值,即每个客户的平均订单数量,不是每个客户计算的值。你需要分析函数,但在MySQL中这可能非常棘手。我建议为此编写一个单独的查询,否则你会有非常复杂的查询,无论如何都会为每一行返回相同的数字。
答案 1 :(得分:0)
select c.cname, o.customerID, count(*), avg(order_total)
from order o join customer using(customerID)
group by 1,2
这将计算每个客户的订单数量和平均订单总数(替换order_total的实际列名称)。
答案 2 :(得分:0)
每个客户有多少订单, 平均订单总数。
SELECT
c1.cname AS custName,
c1.No_of_orders,
c2.avg_order_amt
FROM (
SELECT
c.id,
c.cname,
COUNT(DISTINCT o.orderID) AS No_of_orders
FROM
Customer c
JOIN Order_ o ON o.customerID = c.customerID
GROUP BY c.id, c.cname
) c1
CROSS JOIN (SELECT AVG(No_of_orders) AS avg_order_amt FROM (
SELECT
c.id,
COUNT(DISTINCT o.orderID) AS No_of_orders
FROM
Customer c
JOIN Order_ o ON o.customerID = c.customerID
GROUP BY c.id
)) c2