dポイントプレゼントキャンペーン実施中!

SQL初心者のため、初歩的な質問だと思いますが、回答お願いします。

●健康診断テーブル
ID 回数 結果
―――――――
A  1  11
B  1  22
B  2  23
C  1  11
C  2  22
C  3  12
D  1  12
E  1  31

●個人情報テーブル
ID 所属 
―――――
A  経理 
B  総務 
C  営業 
D  営業
E  経理

上のような二つのテーブルがあります。
IDは人物の識別に使うIDで、同じIDなら同じ人を表しています。
健康診断テーブルの結果は、回数を重ねると変わってしまうこともあります。
この二つのテーブルから、所属ごとの結果を表示したいです。
上記の場合、以下のようなデータを出力できるようにしたいです。

所属 結果 人数
―――――――――
経理 11  1
経理 31  1
総務 23  1
営業 12  2

どのようにプログラムを組めばいいのでしょうか。
グーグル等で検索しても、自分の理解できる解答は見つかりませんでした。
(自分のプログラムレベルがかなり酷く、わからないがわからないのレベルです)

今は初回・2回・3回と回数を変更するSQL文は作成できています。
すいませんが、回答お願いします。

A 回答 (4件)

間違ってるので訂正。



select B.所属,A.結果,count(*) as "人数"
from
(
select x.*,row_number() over(partition by ID order by 回数 desc) R
from 健康診断テーブル x
) A,
個人情報テーブル B
where R=1 and A.ID=B.ID
group by B.所属,B.結果
;
    • good
    • 0
この回答へのお礼

動きました!!本当にありがとうございます。
内容も間違っていないようなので一安心してました。
かなり複雑に見えます、どういう動きをしているかは後で勉強してみます。

お礼日時:2010/01/01 04:39

自分が書くなら、探査が各1回ずつで済むので、こんな感じかな・・



select B.所属,count(*)
from
(
select x.*,row_number() over(partition by ID order by 回数 desc) R
from 健康診断テーブル x
) A,
個人情報テーブル B
where R=1 and A.ID=B.ID
group by A.ID,B.結果
;
    • good
    • 0

select


A.所属, B.結果, count(*) as 人数
from
個人情報 A,
健康診断 B
where
A.ID = B.ID
and
B.回数 = (select max(回数) from 健康診断 C where C.ID = B.ID)
group by
A.所属, B.結果

こんな感じじゃないですか
    • good
    • 0
この回答へのお礼

ありがとうございます。これが一番簡単な方法だと思いました。
このような発想すら浮かばないくらい、初心者かつ不向きな脳内なので大変です。
ただ、なぜかこの方法でも動きませんでした。
説明不足で申し訳ありません。

お礼日時:2010/01/01 04:37

select 所属,結果,count(id) 人数 from 健康診断テーブル natural join 個人情報テーブル group by 所属,結果


試してないですが、こんな感じではどうでしょう?
    • good
    • 0
この回答へのお礼

ありがとうございます。
ナチュラルジョインというのがあるのですね、勉強になります。
ただこれではうまくいきませんでした。
説明不足だったと思います。申し訳ありません。

お礼日時:2010/01/01 04:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!