質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

2回答

816閲覧

SQLにおいて比率の推移を算出する方法について

Taka_Yamag

総合スコア29

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/02/05 02:38

編集2020/02/05 03:05

例えば、以下のようなDBのテーブルがあって、3レコード毎にステータスの比率を出すにはどうしたら良いのでしょうか?

IDステータス
1生存
2病気
3死亡
4死亡
5死亡
6生存
7病気
8生存
9生存
10病気
11病気
12病気

上記アウトプットとしては
|ID|生存|病気|死亡|
|:--|:--:|--:|
|1|0.33|0.33|0.33|
|2|0.33|0|0.66|
|3|0.66|0.33|0|
|4|0|1|0|

のような感じを想定しています。
どのようなSQLを書けば実現できますでしょうか?どなたかご回答いただけますと幸いです。

環境なのですが、
Re:dashを更新してAWS上でMysqlにSQLを投げる認識です。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/02/05 02:52

DBの明示をタグで行って下さい。バージョンは質問内に追記して下さい。
yambejp

2020/02/05 02:53

結果のIDがおかしいです 結果のID=4は10/11/12を取るのでは? そうなると病気=1/死亡=0ではないのですか?
sazi

2020/02/05 02:56 編集

IDは連番でしょうか? また、欠番はありますか? 3レコードの定義は?
yambejp

2020/02/05 03:05

できればご使用のSQLの種類も指定されたほうがよいかも。
Orlofsky

2020/02/05 03:08

0.33 などの割合を導くための情報を持っているテーブルが必要では?
Orlofsky

2020/02/05 03:08

テーブル定義とデータは CREATE TABLEとINSERTに直した方が動作確認できるので、適切なコメントが付き易いです。
guest

回答2

0

引用テキストのような感じを想定しています

の表の4番が怪しいですが、Postgresで作成しています。

sql

1select ID+1 as ID, 2 substr(cast(avg(生存) as text),1,4) as 生存, 3 substr(cast(avg(病気) as text),1,4) as 病気, 4 substr(cast(avg(死亡) as text),1,4) as 死亡 5 from ( 6 select (ID-1) / 3 ID, 7 case when ステータス='生存' then 1 else 0 end as 生存, 8 case when ステータス='病気' then 1 else 0 end as 病気, 9 case when ステータス='死亡' then 1 else 0 end as 死亡 10 from tblA) as t1 11group by ID 12order by 1;

投稿2020/02/05 03:39

amura

総合スコア333

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ざっくりこんな感じで?

投稿2020/02/05 03:12

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/02/05 03:12

create table tbl(id int primary key,status varchar(10)); insert into tbl values (1,'生存'), (2,'病気'), (3,'死亡'), (4,'死亡'), (5,'死亡'), (6,'生存'), (7,'病気'), (8,'生存'), (9,'生存'), (10,'病気'), (11,'病気'), (12,'病気');
yambejp

2020/02/05 03:12

select CEIL(id/3) as newid, sum(status='生存')/count(*) as alive, sum(status='病気')/count(*) as ill, sum(status='死亡')/count(*) as dead from tbl group by newid;
yambejp

2020/02/05 03:42

あ、たしかにavgでよさげですね select CEIL(id/3) as newid, avg(status='生存') as alive, avg(status='病気') as ill, avg(status='死亡') as dead from tbl group by newid;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問