使用具有子查询

问题描述

因此,目标是获得平均订购量超过所有客户总数的平均顾客名单。

CITY                                                                                                SUM                              
---------------------------------------------------------------------------------------------------- ---------------------------------
Rome                                                                                                                        14000$
Paris                                                                                                                         19000$

我的代码可以运行,但不会在“平均数量排序”列上过滤结果,仅显示总平均值为35.22的结果。

解决方法

可能是您的意思:

select c.customernumber,c.customername,sum(od.quantity_ordered) as sum_qty,round(avg(od.quantity_ordered),2) as avg_dty
from customers c
join orders o using(customerNumber)
join orderdetails od using (orderNumber)
group by customernumber,customername
having avg(od.quantity_ordered) > (select avg(quantity_ordered) from orderdetails)

理论上:

  • 您讨论了计算平均订购量,但是查询所要做的是比较每个客户的平均订购明细数量;假设后者就是您想要的

  • 然后:由于您希望平均每个客户 ,因此请不要在group by

    中输入订单号
  • 不需要inhaving子句中的类似内容:只需将客户的平均值与计算总体的标量子查询进行比较

注意:

  • 不要对标识符(例如列别名)使用单引号-它们用于文字字符串

  • 表别名使查询更易于读写。给所有列加上它们所属表的别名的前缀使查询易于理解