使用 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_value
s 两次,您可以在查询中添加 distinct
修饰符:
SELECT DISTINCT data_value - avg_data_value
FROM data
CROSS JOIN (SELECT AVG(data_value) AS avg_data_value
FROM data) agg
【讨论】:
以上是关于使用 AVG 时返回多行的主要内容,如果未能解决你的问题,请参考以下文章