如果不存在TOP 10值,则结果

时间:2017-07-21 12:17:20

标签: sql sql-server aggregate-functions

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,如何计算平均值?

2 个答案:

答案 0 :(得分:1)

平均值是根据内部查询返回的内容计算的,AVG()会忽略NULL值。

  • 如果内部查询返回10个非空值,则结果= SUM(10个值)/ 10。
  • 如果内部查询返回3个非空值,则结果= SUM(3个值)/ 3。
  • 如果内部查询没有返回非空值,甚至根本没有返回任何值,则result = NULL。

答案 1 :(得分:0)

您可以将TOP视为限制返回的总行数,而不是添加或操作任何值。因此,如果您的查询总共返回90行,TOP将只返回前N个,所以在您的情况下前10个。如果返回的行数少于N行,那么TOP将返回找到的所有行,因为它没有超过指定的最大值。

对于您的特定情况,如果您的子查询返回< 10行,则找到的平均值将基于这些行而不是10.由于您使用AVG函数而不是手动查找平均值,找到的值仍然是找到的行的正确平均值。因此,如果子查询中返回了6行,AVG将与(r1 + r2 + ... + r6)/6执行相同的操作。