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;