【问题标题】:Select values within a range around average选择平均值范围内的值
【发布时间】:2015-03-13 13:40:02
【问题描述】:

我想从一系列对象中找到平均价格,然后选择落在该平均范围容差范围内的对象,例如 用品表。

food       price
-------------
'fish'     $1
'bread'    $2
'eggs'     $3
'coffee'   $4
'bananas'  $5

这里的平均价格是 3 美元。例如,我该怎么做

SELECT food FROM SUPPLIES 
WHERE food BETWEEN AVG(PRICE)-$1 AND AVG(PRICE)+$1

我在公式上尝试过的大多数变体都表明对组函数的使用无效。我也用 'HAVING' 替换了 'WHERE',但没有运气。

【问题讨论】:

    标签: sql


    【解决方案1】:

    不能在WHERE 子句中使用Aggregate 函数。所以你必须使用Sub query 来获得平均价格。我假设价格在您的数据库中存储为decimal。试试这样的,

    DECLARE @table TABLE(food VARCHAR(20), price DECIMAL(18,2))
    
    INSERT INTO @table 
    
    select 'fish', 1 union
    select 'bread',    2 union
    select 'eggs',     3 union
    select 'coffee',   4 union
    select 'bananas',  5
    
    SELECT food FROM @table 
    WHERE price BETWEEN
    (
        SELECT  AVG(PRICE)-1 FROM @table
    )
    AND
    (
        SELECT  AVG(PRICE)+1 FROM @table  
    )
    

    希望这会有所帮助。

    【讨论】:

    • 太棒了。轻松回答。回顾我所有的尝试,我非常接近这一点。我刚刚错过了最后一个 SELECT 语句。谢谢
    猜你喜欢
    • 2015-06-04
    • 2015-04-13
    • 1970-01-01
    • 2020-07-27
    • 2016-09-04
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多