2012-11-29 2 views
0

저는 아버지와 그 아이들의 평균 숫자를 보여주는 SQL 문을 만들어야합니다.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

감사합니다!

+2

당신이 SQL을 만들려고 적이입니다 질문? 그렇다면 작성한 검색어를 표시하여 문제가 발생한 곳을 볼 수 있습니다. 사람들에게 코드를 물어 보지 말고 ... –

+0

이미 완료 한 것을 보여주십시오. 시작을위한 힌트 : 당신은 당신의 예제에서'select'를 가지고 있지 않습니다. 또한 교과서에서 "집계 함수"를 확인하십시오 – Crisfole

+0

첫 번째 게시물에 추가했습니다. –

답변

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