SELECT AVG(f.P_PRICE_LOW) as TOP10_Average
FROM (SELECT top 10 P_PRICE_LOW
FROM fp_basic_bd
WHERE fs_perm_sec_id='B00242-S-US'
ORDER BY fs_perm_sec_id
) as f
通过使用此查询,我计算前10个价格值的平均值。我的问题是:
如果子查询返回的值小于10,如何计算平均值?
答案 0 :(得分:1)
平均值是根据内部查询返回的内容计算的,AVG()
会忽略NULL值。
答案 1 :(得分:0)
您可以将TOP
视为限制返回的总行数,而不是添加或操作任何值。因此,如果您的查询总共返回90行,TOP
将只返回前N个,所以在您的情况下前10个。如果返回的行数少于N行,那么TOP
将返回找到的所有行,因为它没有超过指定的最大值。
对于您的特定情况,如果您的子查询返回< 10行,则找到的平均值将基于这些行而不是10.由于您使用AVG
函数而不是手动查找平均值,找到的值仍然是找到的行的正确平均值。因此,如果子查询中返回了6行,AVG
将与(r1 + r2 + ... + r6)/6
执行相同的操作。