使用AVG时返回多行

时间:2015-06-02 08:36:57

标签: mysql sql select aggregate-functions

为什么这个SQL查询只返回一个结果?

select data_value-AVG(data_value) from data

虽然预期结果是多行,但与每个data_value的平均值不同。

1 个答案:

答案 0 :(得分:1)

您不能将单个列(在本例中为data_value)视为分组列和非分组列。您必须从不同的查询中获取它们并加入它们:

SELECT     data_value - avg_data_value
FROM       data
CROSS JOIN (SELECT AVG(data_value) AS avg_data_value
            FROM   data) agg

如果您不希望两次获得相同的data_value,则可以在查询中添加distinct修饰符:

SELECT     DISTINCT data_value - avg_data_value
FROM       data
CROSS JOIN (SELECT AVG(data_value) AS avg_data_value
            FROM   data) agg