2016-06-01 5 views
-1

をフェッチし、それが結果は、各従業員の名前とすべての従業員の平均給与を含むようにSQLクエリを記述することは可能でしょうか?SQLクエリが列<code>EmpId</code>、<code>Name</code>、<code>Salary</code>と<code>Employee</code>表の場合、従業員の名前と平均給与

サンプルデータ

EmpId  Name  Salary 
1   Alice  12000 
2   Bob   12000 
3   Charlie  10000 
4   Doug   6000 

私はこの結果を返すクエリが必要です。

結果

Name  AvgSalary 
Alice  10000 
Bob  10000 
Charlie 10000 
Doug  10000 
ここ

10000を全て4人の従業員の平均給与です。

+2

これまでに試したことを教えてください。 –

+1

これは愚かです。すべての従業員の平均給与を計算する1つのクエリを実行すると、単純にName、10000をAvgSalary FROM Whateverとして選択できます。その従業員の平均給与ではないので、それは意味をなさない。 –

答えて

2

だから、すべての給与の平均をすべての従業員のリストと共に得るだけです。あなたはそれを毎回計算する必要はありません、それは実際にそうする無駄だろうが、あなたは、単にこれを行うことができます:

SELECT Name, (SELECT AVG(Salary) FROM SampleData) AS AvgSalary 
FROM SampleData 

そうでない場合は、あなただけの一度の平均給与を得ることができます:

DECLARE @AVGSALARY float 
SET @AVGSALARY = (SELECT AVG(Salary) FROM SampleData) 

SELECT Name, @AvgSalary AS AvgSalary 
FROM SampleData 
3

あなたは、このために窓関数を使用することができますが、SELECT内のサブクエリは、より高速でなければなりません:

SELECT name, avg(salary) OVER() as avgSal FROM SampleData; 
+0

あなたはちょうど 'over()'と言うことができます – shawnt00

+0

"Over"私はそれを知らなかった。卑劣なこと!ありがとう:) – JNevill

0
select distinct name, average from sampledata 
cross join 
(select avg(salary) average from sampledata) a1 
0
SELECT Name, AVG(Salary) 
FROM SampleData 
GROUP BY Name 
+0

これはすべての従業員の平均ではありません。これは、各従業員の個別の平均です。 – JNevill

+0

グループ別に一意の従業員名を取得します – mpatel

+0

はい。はい、そうです。また、平均(給与)は別個の従業員の平均給与を返します。それは求められたものではない。 OPはすべての従業員の給与の平均を求めた。 – JNevill

関連する問題