トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

12-3 グループの平均年齢を取得

SQLパズル

年齢テーブル
会員番号  年齢  グループ
--------  ----  --------
001        20    B
002        30    C
003        60    A
004        40    C
005        40    B
006        50    C

会員が二人以上いるグループの、平均年齢を出力する。

出力結果
グループ  平均年齢
--------  --------
 B         30
 C         40


データ作成スクリプト

create table 年齢(
会員番号 char(3),
年齢     number(2),
グループ char(1));

insert into 年齢 values('001',20,'B');
insert into 年齢 values('002',30,'C');
insert into 年齢 values('003',60,'A');
insert into 年齢 values('004',40,'C');
insert into 年齢 values('005',40,'B');
insert into 年齢 values('006',50,'C');
commit;


SQL

col グループ for a8

--■■■グループ化する方法■■■
select グループ,
avg(年齢) as 平均年齢
from 年齢
group by グループ
having count(*) >= 2
order by グループ;

--■■■分析関数を使う方法■■■
select グループ,平均年齢
from (select distinct グループ,
      avg(年齢) over(partition by グループ) as 平均年齢,
      count(*)  over(partition by グループ) as グループカウント
      from 年齢)
where グループカウント >= 2
order by グループ;


解説

count関数の結果が、2以上かチェックしてます。