0

我必须创建一个 sql 语句来显示父亲和他们的平均孩子数量。

这是我的 sql 脚本:

create table breeder (
breederNumber   number(3) primary key,
name            varchar2(20),
residence       varchar2(20),
password        varchar2(20)
);

create table race (
raceCode        varchar2(2) primary key,
raceName        varchar2(20) not null
);

create table sheep (
earTagNumber    number(2) primary key,
father          number(2),
mother          number(2),
raceCode        varchar2(2),
name            varchar2(20),
previousBreeder number(3),
genotype        varchar2(7),
gender          varchar2(1) check (gender = 'M' OR gender = 'F'),

constraint fk_previousBreeder foreign key (previousBreeder) references breeder(breederNummer) on delete cascade,
constraint rk_raceCode foreign key (raceCode) references race(raceCode) on delete cascade,
constraint fk_mother foreign key (mother) references sheep(earTagNumber) on delete cascade,
constraint fk_father foreign key (father) references sheep(earTagNumber) on delete cascade
);

这是我到目前为止所拥有的:

select (s1.father), avg(s2.earTagNumber) as averageNumberOfKids
from sheep s1
join sheep s2 on s1.earTagNumber= s2.father
group by s1.father;

输出我得到的:

FATHER AVERAGENUMBEROFKIDS
------ -------------------
                      6.75 

谁能帮我?

部分测试数据: http: //pastie.org/5452411

提前致谢!

4

1 回答 1

0

这是每个父亲的孩子总数:

Select 
  fathers.EarTagNumber,
  fathers.Name,
  Count(*) As NumberOfKids
From
  sheep fathers
    Inner Join 
  sheep children
    On fathers.earTagNumber = children.father
Group By
  fathers.EarTagNumber,
  fathers.Name;

这是孩子的平均人数(孩子总数/父亲人数)

Select
  Avg(NumberOfKids) As AvgKids
From (
  Select 
    fathers.EarTagNumber,
    Count(*) As NumberOfKids
  From
    sheep fathers
      Inner Join 
    sheep children
      On fathers.earTagNumber = children.father
  Group By
    fathers.EarTagNumber
) a;  

http://sqlfiddle.com/#!4/e5121/10

于 2012-11-29T13:30:07.907 回答