0

我想从特定类别 (fk_rate_category) 中的产品 (productId) 中获取费率以及该类别中所有产品的总体平均费率。

更具体地说:我需要图表的数据。图表中的一条线表示产品的费率(y 轴 = rate ; x 轴 = date_added),另一条线显示所有产品的平均费率。

我有以下方法:

SELECT        id, productId, rate, fk_rate_category, date_added,
                             (SELECT        AVG(rate) AS Expr1
                               FROM            rates
                               WHERE        (fk_rate_category = r.fk_rate_category)) AS avgRate
FROM            rates AS r
WHERE        (productId = @productId) AND (fk_rate_category = @fk_rate_category)

问题是,使用我的方法,返回的每条记录中的 avgRates 值都是相同的。

任何想法?

4

2 回答 2

1

首先,当您可以通过连接获得相同的结果时,请始终尽量避免使用相关子查询,优化器会更好地处理它并且您会更快地获得结果。

我认为问题可能是因为您没有链接数据的日期以及 FK_Rate_Cateogry,我想如果这是出于图形目的,您会希望按日期计算平均值:

SELECT  r.ID,
        r.ProductID,
        r.Rate,
        r.FK_Rate_Category,
        r.Date_Added,
        ar.avgRate
FROM    Rates r
        LEFT JOIN
        (   SELECT  r.Date_Added, 
                    r.FK_Rate_Category, 
                    AVG(r.Rate) AS avgRate
            FROM    Rates r
            GROUP BY r.FK_Rate_Category, r.Date_Added
        ) ar
            ON ar.FK_Rate_Category = r.FK_Rate_Category
            AND ar.Date_Added = r.Date_Added
WHERE   r.ProductID = @ProductID
AND     r.FK_Rate_Category = @FK_Rate_Category;
于 2012-11-07T17:53:02.560 回答
0

你得到了一组具有特定 id 和 rate_category 的记录。并且 avgRate 是具有相同 rate_category 的所有记录的平均值 - 该集合将外部记录作为子集(参见两个查询的条件)。所以所有返回的记录都具有相同的 avgRate 值。
所以我在你的逻辑线上看到了一些漏洞。

于 2012-11-07T17:59:38.340 回答