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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

Q&A

解決済

3回答

9444閲覧

sqlで合計の件数から割合を算出したい

enigumalu

総合スコア192

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

0グッド

0クリップ

投稿2017/11/28 04:20

豆のようなものを都度レコード登録するようなものを作成しているのですが、
登録した情報、↓全体の豆の個数(numの総和)からsanbiaが何パーセントあったかを表示したいのですがsqlで可能でしょうか?

Beantypenum
coffeg1
coffen2
coffen1
cacaon1
cacaog3
cacaol1
cacaon4
sanbiag1

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

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

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

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

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

guest

回答3

0

ベストアンサー

sum+case文で求めてみました。

sql

1CREATE TEMP TABLE table_a (bean text, type text, num int); 2 3INSERT into table_a values 4('coffe','g',1), 5('coffe','n',2), 6('coffe','n',1), 7('cacao','n',1), 8('cacao','g',3), 9('cacao','l',1), 10('cacao','n',4), 11('sanbia','g',1); 12 13select trunc(sum(case when bean='sanbia' then num else 0 end)::float / sum(num::float)*100) || '%' as Percent from table_a;

件数ベースの場合はcountを使いました

select trunc(count(case when bean='sanbia' then 1 else null end) / count(1)::float *100) || '%' as Percent from table_a;

投稿2017/11/28 12:21

編集2017/11/28 13:59
A.Ichi

総合スコア4070

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

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

enigumalu

2017/11/29 06:30

実行結果で少数の扱いを失念していたためtrunc少数切り捨てがあったためこちらベストアンサーにさせていただきました!
guest

0

コメントの質問について

いま件数をnumでもってますが1レコード1件とした場合でもsumでさまれるのでしょうか?

Numフィールドがなくて、下記のようなことかなと解釈しましたが、あっているかな。

select bean,Count()/(select Count() from tbl) as ratio from tbl group by bean;

投稿2017/11/28 05:52

hatena19

総合スコア33715

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

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

0

標準的な関数でやるならこうですかね

SQL

1create table tbl(bean varchar(10),type varchar(10),num int); 2insert into tbl values 3('coffe','g',1), 4('coffe','n',2), 5('coffe','n',1), 6('cacao','n',1), 7('cacao','g',3), 8('cacao','l',1), 9('cacao','n',4), 10('sanbia','g',1); 11 12select bean,sum(num)/(select sum(num) from tbl) as ratio from tbl group by bean

追記

1レコード1件とした場合でもsumでさまれるのでしょうか?

こういうことですか?

SQL

1create table tbl2(bean varchar(10),num int); 2insert into tbl2 values 3('cacao ',9), 4('coffe ',4), 5('sanbia ',1); 6select bean,num,num/(select sum(num) from tbl2) as ratio from tbl2

sanbiaのデータだけ

SQL

1select num/(select sum(num) from tbl2) as ratio from tbl2 where bean='sanbia'

投稿2017/11/28 04:36

編集2017/11/28 05:38
yambejp

総合スコア114843

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

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

enigumalu

2017/11/28 05:29

ありがとうございます、いま件数をnumでもってますが1レコード1件とした場合でもsumでさまれるのでしょうか?
yambejp

2017/11/28 06:03

ねんのため確認ですが、「件数」というのはnumの数字の合計だと考えていいですか? データ件数ではないですよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問