-1

微软 SQL 服务器 2008

一个工人住在某个国家,可能有不止一份工作,有不止一份薪水。

我想得到每个国家个人总工资的平均值。

表:

1) 国家(country_id, name)

2) 人(ssn, name,country_id)

3)工作(ssn,job_title,薪水)

[国家]

  • 1、美国
  • 2、德国

[人们]

  • 010101,约翰,1
  • 020202,李,1
  • 030303,哈利,2

[工作]

  • 010101, 老师, 3200
  • 010101, 建设者, 1500
  • 020202, 演员, 45000
  • 020202, 歌手, 200000
  • 030303, 生产者, 120000

需要的查询结果:

每个国家的平均值(每个国家)=每个工人总工资的总和)/工人数量

国家 - 平均工资

  • 美国 - 124850
  • 德国 - 120000
4

3 回答 3

2

尝试这个:

SELECT c.name, sum(j.salary)/count(distinct p.ssn) as Avg_Sal 
FROM Countries c
INNER JOIN people p ON c.country_id = p.country_id
INNER JOIN Jobs j on p.ssn = j.ssn
group by c.name
于 2012-12-14T17:30:32.733 回答
1

这应该适合你:

select Salary / count(c.name) AvgSalary, c.Name
from people p
inner join 
(
  select sum(salary) Salary, p.country_id
  from jobs j
  left join people p
    on j.ssn = p.ssn
  group by p.country_id
) sal
  on p.country_id = sal.country_id
left join countries c
  on p.country_id = c.country_id
group by salary, c.Name;

请参阅带有演示的 SQL Fiddle

于 2012-12-14T17:35:12.397 回答
0

这将完全做到,

with
country as
(select c.country_id,c.name name,p.ssn ssn from countries c,people p where c.country_id=p.country_id),
sal1 as
(select sum(salary) salary,j.ssn ssn from people p,jobs j where p.ssn=j.ssn group by j.ssn)
select country.name,avg(sal1.salary) from sal1,country where sal1.ssn=country.ssn group by country.name;

sqlfiddle

使用 with 子句将更具可读性和可理解性。

于 2012-12-14T17:35:16.343 回答