使用 AVG 时返回多行

Posted

技术标签:

【中文标题】使用 AVG 时返回多行【英文标题】:Return multiple rows when using AVG 【发布时间】:2015-08-15 22:54:33 【问题描述】:

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

select data_value-AVG(data_value) from data

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

【问题讨论】:

group by data_value 只是为了让我清楚要求 - 您是否试图将每个 data_value所有 数据值的平均值之间的差异? @Mureinik 是的,就是这样 @AbhikChakraborty 按 data_value 分组返回每行 0 @GhilasBELHADJ 这么认为,谢谢 - 请参阅下面的答案。 【参考方案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_values 两次,您可以在查询中添加 distinct 修饰符:

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

【讨论】:

以上是关于使用 AVG 时返回多行的主要内容,如果未能解决你的问题,请参考以下文章

MySQL—— 分组函数(多行处理函数)

SQLite AVG() 返回与行相同的结果

使用多行标签时 systemLayoutSizeFittingSize 返回的尺寸错误

Oracle 单行子查询在使用嵌套子查询时返回多行

在 SQL 查询中使用 avg() 函数只返回一行?

Oracle_SQL 分组与聚合函数