豆のようなものを都度レコード登録するようなものを作成しているのですが、
登録した情報、↓全体の豆の個数(numの総和)からsanbiaが何パーセントあったかを表示したいのですがsqlで可能でしょうか?
Bean | type | num |
---|---|---|
coffe | g | 1 |
coffe | n | 2 |
coffe | n | 1 |
cacao | n | 1 |
cacao | g | 3 |
cacao | l | 1 |
cacao | n | 4 |
sanbia | g | 1 |
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア4070
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総合スコア114843
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/29 06:30