我有一个带有Date_ordered列的Orders表。
我正在尝试选择12月份购买的所有订购商品的平均价格。
我用过
select *, avg(price) from orders where monthname(date_ordered) = "december"
然而,只有一个结果,当我的表有4个日期为xxxx-12-xx的实例时
注意:数据中包含多年但它们与我需要的查询无关
答案 0 :(得分:1)
avg()
是一个组函数。如果查询中没有GROUP BY
子句,则会导致组函数应用于所有选定的行。因此,您将获得该领域四种价格的平均值。平均只有一个。
答案 1 :(得分:0)
当您将avg()
放入select
时,您将查询转换为聚合查询。没有group by
,SQL 始终返回行。如果您想要平均值和其他数据,请使用join
或子选择:
select o.*, oo.avgp
from orders o cross join
(select avg(price) as avgp from orders where month(date_ordered) = 12) oo
where month(o.date_ordered) = 12;
答案 2 :(得分:0)
AVG()是一个聚合函数。它会对price列中的每个值进行平均,并将结果压缩为一行。您可以通过其他列group结果,或者考虑是否确实要使用avg()