-1

Microsoft SQL Server 2008

労働者はある国に住んでいて、複数の給与で複数の仕事をしている場合があります。

各国の個人の給与総額の平均を求めたい。

テーブル:

1)国(country_id、name)

2)人(ssn、name、country_id)

3)ジョブ(ssn、job_title、salary)

[国]

  • 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 FiddlewithDemoを参照してください

于 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 に答える