0

特定のカテゴリ(fk_rate_category)にある製品(productId)からのレートと、カテゴリ内のすべての製品からの全体的な平均レートを取得したいと思います。

具体的には、グラフのデータが必要です。グラフの1本の線は製品のレートを表し(y軸=レート、x軸= date_added)、もう1本の線はすべての製品の平均レートを示します。

私は次のアプローチを取りました:

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 に答える