使用带有 having 的子查询
using a subquery with a having
因此,我们的目标是获取平均订购量超过所有客户总平均值的客户列表。
Select customerNumber, customerName, orderNumber, SUM(quantityOrdered)as 'total_qty', ROUND(AVG(quantityOrdered),2) as 'avg'
From customers
join orders using(customerNumber)
join orderdetails using (orderNumber)
Group by customerNumber, OrderNumber
Having ROUND(AVG(quantityOrdered),2) > ROUND(AVG(quantityOrdered),2) IN
(SELECT ROUND(AVG(quantityOrdered),2) FROM orderdetails)
ORDER BY customerName;
我的代码运行了,但它没有过滤 avg quantity ordered 列上的结果,只显示总平均值超过 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
不需要在 having
子句中使用 in
或 the-like:只需将客户的平均值与计算总体
备注:
不要对标识符(例如列别名)使用单引号 - 它们适用于文字字符串
table 别名使查询更易于编写和阅读;在所有列前加上它们所属的 table 的别名使得查询易于理解
因此,我们的目标是获取平均订购量超过所有客户总平均值的客户列表。
Select customerNumber, customerName, orderNumber, SUM(quantityOrdered)as 'total_qty', ROUND(AVG(quantityOrdered),2) as 'avg'
From customers
join orders using(customerNumber)
join orderdetails using (orderNumber)
Group by customerNumber, OrderNumber
Having ROUND(AVG(quantityOrdered),2) > ROUND(AVG(quantityOrdered),2) IN
(SELECT ROUND(AVG(quantityOrdered),2) FROM orderdetails)
ORDER BY customerName;
我的代码运行了,但它没有过滤 avg quantity ordered 列上的结果,只显示总平均值超过 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
不需要在
having
子句中使用in
或 the-like:只需将客户的平均值与计算总体
备注:
不要对标识符(例如列别名)使用单引号 - 它们适用于文字字符串
table 别名使查询更易于编写和阅读;在所有列前加上它们所属的 table 的别名使得查询易于理解