Sql 将生成客户名称列表和每个客户的平均订单值的查询
我有一个数据库,我需要创建一个查询来检索客户名称列表和每个客户的平均订单值。 我试过:Sql 将生成客户名称列表和每个客户的平均订单值的查询,sql,sqlite,Sql,Sqlite,我有一个数据库,我需要创建一个查询来检索客户名称列表和每个客户的平均订单值。 我试过: 选择c.customer\u name,AVG(COUNT(o.order\u id)*f.price)作为“avgorderprice” 来自客户c 左连接订单o ON o.customer\u id=c.customer\u id o.order\u id=fio.order\u id上的内部联接F\u in\u或fio fio上的内连接薄膜f.film_id=f.film_id; 这是我的数据库结构:
选择c.customer\u name,AVG(COUNT(o.order\u id)*f.price)作为“avgorderprice”
来自客户c
左连接订单o ON o.customer\u id=c.customer\u id
o.order\u id=fio.order\u id上的内部联接F\u in\u或fio
fio上的内连接薄膜f.film_id=f.film_id;
这是我的数据库结构:
但是我有一个错误,有什么问题吗?我认为这应该行得通
SELECT c.customer_name, AVG(f.price) AS 'avgorderprice' FROM Customers c LEFT JOIN Orders o ON o.customer_id = c.customer_id LEFT JOIN F_in_Or fio ON o.order_id = fio.order_id LEFT JOIN Films f ON fio.film_id = f.film_id;
但是我犯了一个错误,会有什么错呢
您试图在聚合函数中使用聚合函数Count,并且滥用了聚合函数
i、 e.->滥用聚合函数COUNT()
此外,您没有对结果进行分组,因此将获得全部平均值,而不是每位客户的平均值
- 聚合函数在组上工作默认值为all,除非
子句将行放入组中GROUP BY
sum(f.price)/COUNT(*)代替AVG(COUNT(o.order\u id)*f.price)
。但是,有一个平均聚合函数avg
。所以平均价格(f.price)更简单
此外,由于您需要每个客户的平均值,因此您需要使用一个GROUP BY c.customer
子句
因此,您可以使用:-
SELECT
c.customer_name,
avg(f.price) AS 'avgorderprice' --<<<<< CHANGED
FROM Customers c
LEFT JOIN Orders o ON o.customer_id = c.customer_id
INNER JOIN F_in_Or fio ON o.order_id = fio.order_id
INNER JOIN Films f ON fio.film_id = f.film_id
GROUP BY c.customer_name --<<<<< ADDED
;
选择
c、 客户名称,
avg(f.price)作为“avgorderprice”——表的模式会有所帮助。请添加有关您收到的错误消息的更多详细信息