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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1239閲覧

SQLで合計から割合を求めたい

eoi

総合スコア1

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2022/01/05 14:18

PythonのIDLEからSqlite3を使っています。
青,黄,赤の3色から好きな色選んでもらうHTMLのWEBベースのアンケート調査をしています。
アンケートを答えた人数から,各色の好きな人数の割合(%)を求めたいのですが,どなたか教えていただけますでしょうか?

割合(%)にしたい部分の表示は,現在人数の表示になっています。

from

1import sqlite3 2 3@route('/',method='get') 4def index_home(): 5 return indexform #入力画面を呼び出す 6 7@route('/',method='post') 8def index_input(): 9 #入力された値(出席番号, 氏名, 色)を取得 10 id = request.forms.id 11 name = request.forms.name 12 color = request.forms.fcolor 13 #データベースに接続して入力された値をデータベースに入力 14 conn = sqlite3.connect('colordb.sqlite3') 15 cur = conn.cursor() 16 cur.execute('insert into fc values(?,?,?)', (id, name, color)) 17 conn.commit() 18 conn.close() 19 return indexform #次の入力を促すために入力画面を呼び出す 20 21#入力画面 22indexform = ''' 23<form action='/' method='post'> 24 <p>好きな色を集計します.</p> 25 <p>出席番号と氏名を入力後半角英数字でもれなく入力し,送信ボタンを押してください.</p> 26 <p>出席番号<input type='text' name='id'></p> 27 <p>氏名(ローマ字)<input type='text' name='name'></p> 28 <p>次のうちから,好きな色を選んでください.</p> 29 <p><input type='radio'checked name='fcolor' value='1'>青 30 <input type='radio' name='fcolor' value='2'>黄 31 <input type='radio' name='fcolor' value='3'>赤</p> 32 <p><input type='submit' value='送信'></p> 33 <a href='/result'>集計結果</a> 34</form> 35''' 36 37 38#結果 39@route('/result') 40def result(): 41 #データベースに接続 42 conn = sqlite3.connect('colordb.sqlite3') 43 cur = conn.cursor() 44 cur.execute('select count(color) from fc where color=1') 45 blue = cur.fetchone()[0] 46 cur.execute('select count(color) from fc where color=2') 47 yellow = cur.fetchone()[0] 48 cur.execute('select count(color) from fc where color=3') 49 red = cur.fetchone()[0] 50 conn.close() 51 return '''<p> 集計結果 </p> 52 <p> 青が好きな人は{0}人です.</p> 53 <p> 黄が好きな人は{1}人です.</p> 54 <p> 赤が好きな人は{2}人です.</p> 55 <p><a href=\'/\'>入力画面に戻る</a></p>'''.format(blue, yellow, red) 56 57 58#テーブルの作成(すでに存在するなら削除して,作成) 59@route('/create') 60def create(): 61 conn = sqlite3.connect('colordb.sqlite3') 62 cur = conn.cursor() 63 cur.execute('drop table if exists fc') #すでに存在するなら削除 64 cur.execute('''create table fc 65 (id integer not null, 66 name text not null, 67 color integer, 68 primary key (id))''') 69 conn.commit() 70 conn.close() 71 return '<p>テーブルを作成しました</p>' 72 73 74run(host='0.0.0.0',port=80) 75

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

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

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

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

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

hoshi-takanori

2022/01/05 17:32

アンケートに答えた人の人数を数えて、割合を計算すれば良いと思いますが、どの辺が分からないのでしょうか?
guest

回答1

0

ベストアンサー

おはようございます。

割合を求めるなら、以下の感じでしょうか。

python

1#結果 2@route('/result') 3def result(): 4 #データベースに接続 5 conn = sqlite3.connect('colordb.sqlite3') 6 cur = conn.cursor() 7 cur.execute('select count(color) from fc where color=1') 8 blue = cur.fetchone()[0] 9 cur.execute('select count(color) from fc where color=2') 10 yellow = cur.fetchone()[0] 11 cur.execute('select count(color) from fc where color=3') 12 red = cur.fetchone()[0] 13 conn.close() 14 15 gokei = blue + yellow + red # 合計を計算 16 wariai_blue = blue / gokei * 100 # 青の割合を計算 17 wariai_yellow = yellow / gokei * 100 # 黄の割合を計算 18 wariai_red = red / gokei * 100 # 赤の割合を計算 19 20 return '''<p> 集計結果 </p> 21 <p> 青が好きな人は{0}人です.</p> 22 <p> 黄が好きな人は{1}人です.</p> 23 <p> 赤が好きな人は{2}人です.</p> 24 <p> 青が好きな人の割合は{3}パーセントです.</p> 25 <p> 黄が好きな人の割合は{4}パーセントです.</p> 26 <p> 赤が好きな人の割合は{5}パーセントです.</p> 27 <p><a href=\'/\'>入力画面に戻る</a></p>'''.format(blue, yellow, red, wariai_blue, wariai_yellow, wariai_red)

投稿2022/01/05 21:31

srsnsts

総合スコア508

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

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

eoi

2022/01/08 16:16

解決することができました。 ありがとうございました!
srsnsts

2022/01/08 19:10

お役に立てたようでよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問