重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

どうかご教示お願いいたします

テーブル名:table A
カラム:rank,名前,点数
1,name4,20
2,name2,15
3,name3,10
4,name1,5

テーブル名:table B
カラム:rank,名前,点数
1,name4,20
2,name2,15
3,name3,10
4,name1,5

テーブル名:table C
カラム:rank,名前,点数
1,name4,20
2,name2,15
3,name3,10
4,name1,5

上記3つのテーブルより



まず結果として
カラム:ランク順,名前,合計,回数,1番率,2番率,2番以内率
1,name4,60,3,100,0,100
2,name2,45,3,0,100,100
3,name3,30,3,0,0,0
4,name1,15,3,0,0,0

このようにしたいのですが、わかりません
まず1つの年度で
回数=count(*)
1番率=(sum(rank = 1) / count(*))
で、率まで取れたのですが、

わからないことが
・合計点の取り方
・複数テーブルでの計算方法
・計算結果=>1番率ソート=>2番率ソート

この3点のやり方がわかりません

どうか教えてください

A 回答 (2件)

サンプルが中途半端ななのでなんとも言えませんが、これでどうでしょう?



create table tbl_a(rank int,name varchar(20),point int);
create table tbl_b(rank int,name varchar(20),point int);
create table tbl_c(rank int,name varchar(20),point int);
insert into tbl_a values
(1,'name4',20),
(2,'name2',15),
(3,'name3',10),
(4,'name1',5);
insert into tbl_b values
(1,'name4',20),
(2,'name2',15),
(3,'name3',10),
(4,'name1',5);
insert into tbl_c values
(1,'name4',20),
(2,'name2',15),
(3,'name3',10),
(4,'name1',5);

・集計
select name
,sum(point) as point_sum
,count(*) as count
,sum(rank=1)/count(*) *100 as ratio_1st
,sum(rank=2)/count(*) *100 as ratio_2nd
,sum(rank in (1,2))/count(*) *100 as ratio_1t_2nd
from (
select * from tbl_a
union all select * from tbl_b
union all select * from tbl_c
) as t1
group by name
order by point_sum desc

※ランクの考え方がわからないのでランク番号はいれていません
同順だったらどうするのか?
集計後のランクは合計値でみればいいのか?
    • good
    • 0

テーブルA,B,Cは同じものに見えますが、別れている意味あるのでしょうか?

    • good
    • 0
この回答へのお礼

実際にはテーブルの内容は全く違います。。。

お礼日時:2019/03/12 16:08

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

関連するカテゴリからQ&Aを探す