2017-05-05 97 views
-1
Name Wage Year 
John 25,000 2016 
John 35,000 2016 
John 50,000 2015 
Paul 70,000 2015 
Paul 72,000 2016 
George 50,000 2015 
George 50,000 2016 

假設我有上面的SQL表,我如何比較一年中只有一個工資的人與那些有多個工資的人的平均工資?例如。 2016年,有一項工資的人會比兩人有更高的收入?反之亦然?如何比較數據庫中的不同值與重複值?

我試圖寫一個人只有一次出現一次查詢與那些出現不止一次,並比較兩組的平均工資。

我想結果是:

single_wage_average  multiple_wage_average  Year 
50,000     61,000     2016 
+0

郵報(添加到您的問題)所期望的結果。 –

+0

預期輸出? –

+1

你有什麼研究,嘗試過,發現不起作用? – dfundako

回答

1

你可以得到所有這些使用平均如下計算:

select *, AverageWage = avg(wage) over(partition by name, [year]), 
    [CountOfOneWage]=count(name) over(partition by name, [year]) from #yourwage 
order by name 

有了這個查詢就可以得到所需的輸出。

您的輸入表:

create table #yourwage (name varchar(20), wage money, year int) 

insert into #yourwage 
(Name , Wage , [Year] ) values 
('John', 25000 , 2016 ) 
,('John', 35000 , 2016 ) 
,('John', 50000 , 2015 ) 
,('Paul', 70000 , 2015 ) 
,('Paul', 72000 , 2016 ) 
,('George', 50000 , 2015 ) 
,('George', 50000 , 2016 ) 
+0

不完全是我的想法,但這會讓我在那裏。謝謝! – Ben

0

我就開始聚集:

select name, year, avg(wage) as avg_wage, count(*) as num 
from t 
group by name, year; 

然後你就可以再次聚合:

select year, 
     avg(case when num = 1 then avg_wage end) as singleton_avg, 
     avg(case when num > 1 then avg_wage end) as duplicate_avg 
from (select name, year, avg(wage) as avg_wage, count(*) as num 
     from t 
     group by name, year 
    ) ny 
group by year; 
+0

匿名downvote非常好奇,似乎是一個正確的答案。 –

相關問題