Mysql:按月搜索数据只会产生一个结果而不是所有结果

时间:2015-06-21 20:41:20

标签: mysql sql

我有一个带有Date_ordered列的Orders表。

我正在尝试选择12月份购买的所有订购商品的平均价格。

我用过

select *, avg(price) from orders where monthname(date_ordered) = "december"

然而,只有一个结果,当我的表有4个日期为xxxx-12-xx的实例时

注意:数据中包含多年但它们与我需要的查询无关

3 个答案:

答案 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()