ネストまたはサブクエリを用いたカラム・なしの各値と列の平均値を比較しようとしています

user9668103:

これは私のデータがどのように見えるかです。

画像

私は、平均レートよりも大きいレートを持つビジネスエンティティを知りたいです。これはそれのほんの一部であるデータベース - に、より多くのデータがあります

クエリ私が使用しました:

SELECT A.BusinessEntityID, A.Rate, AVG(B.Rate) as AverageRate
FROM HumanResources.EmployeePayHistory AS A
INNER JOIN HumanResources.EmployeePayHistory AS B ON B.BusinessEntityID = A.BusinessEntityID - 1
GROUP BY A.BusinessEntityID, A.Rate
HAVING A.Rate > AVG(B.Rate)
Order By A.BusinessEntityID

私はこの結果を得ました

私は、各行/ IDの異なる平均値を得るが、それは全体のレートの列の平均で1つの値でなければなりません

結果

digital.aaron:

あなたは使用することができCROSS APPLY、ここで、その後、クロス適用されたテーブルからすべてのエンティティのための平均レートを取得します。基本的には自分のを変更INNER JOINするCROSS APPLYと、結合条件を削除します。クエリは次のようになります。

SELECT
    A.BusinessEntityID
    ,A.Rate
    ,AverageRate = AVG(B.Rate)
FROM HumanResources.EmployeePayHistory AS A
CROSS APPLY HumanResources.EmployeePayHistory AS B 
GROUP BY
    A.BusinessEntityID
    ,A.Rate
HAVING A.Rate > AVG(B.Rate)
ORDER BY A.BusinessEntityID;

GMBは、前述のように、CROSS APPLY唯一のSQL Serverで動作します。しかし、CROSS JOINまた、MySQLでこのクエリで動作するはずです。

SELECT
    A.BusinessEntityID
    ,A.Rate
    ,AverageRate = AVG(B.Rate)
FROM HumanResources.EmployeePayHistory AS A
CROSS JOIN HumanResources.EmployeePayHistory AS B 
GROUP BY
    A.BusinessEntityID
    ,A.Rate
HAVING A.Rate > AVG(B.Rate)
ORDER BY A.BusinessEntityID;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=8902&siteId=1