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

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

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

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

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回答

1436閲覧

SQL 割合を求める(副問い合わせ)

sanezane

総合スコア91

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

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クリップ

投稿2018/01/05 14:38

SQLを勉強しています。
問題文の全文:勇者の現在のHPが、パーティー全員のHPの何%に当たるかを求めるため、適切な列を用いて次の別名で抽出する。ただし、割合は小数点第二位を四捨五入し、小数点第一位まで求めること。
・なまえ ・現在のHP ・パーティーでの割合

勇者(職業コード:1)の名前、現在のHP、パーティーでの勇者のHPの割合(%)を求める問題で、割合の部分がどうしても思いつきません(3行目)。

全体のHPは副問い合わせしましたが、勇者のHPの部分をどうやって呼び出したらよいでしょうか。
お力をお貸しください。
イメージ説明

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

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

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

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

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

guest

回答3

0

パーセンテージを求める際に何れかが小数点付の型である必要があります。
以下のように演算の要素ごとに取り出した結果を確認すると型がはっきり分かります。

SQL

1select 名称 as なまえ, HP as 現在のHP 2 , (SELECT SUM(HP) FROM パーティ) as パーティのHP合計 -- bigint 3 , HP/(SELECT SUM(HP) FROM パーティ) as 割合1 -- bigint 4 , HP::numeric/(SELECT SUM(HP) FROM パーティ) as 割合2 -- numeric 5 , round(HP::numeric/(SELECT SUM(HP) FROM パーティ)*100,1) AS パーティーでの割合 6from パーティ 7where 職業コード='01'

投稿2018/01/06 02:09

sazi

総合スコア25173

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

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

sanezane

2018/01/06 02:29

ありがとうございます!小数点付は何れかで良いのですね!勉強になります。 複雑だなと思うものは要素ごとにしてみようと思います。
guest

0

ベストアンサー

数字をcastしてあげると良いのでは

sql

1select 名前 AS なまえ, HP AS 現在のHP, 2 round(HP::numeric / (select sum(HP) from パーティー) * 100, 1) AS パーティーでの割合 3from パーティー where 職業コード='01';

sql

1select 名前 AS なまえ, HP AS 現在のHP, 2 round(cast(HP AS numeric ) / (select sum(HP) from パーティー) * 100, 1) AS パーティーでの割合 3from パーティー where 職業コード='01'; 4 5select 名前 AS なまえ, HP AS 現在のHP, 6 round(HP * 1.00 / (select sum(HP) from パーティー) * 100, 1) AS パーティーでの割合 7from パーティー where 職業コード='01';

dokoQLのサンプルで試してみました

SELECT 日付, 費目, 出金額, round(出金額::numeric/(select sum(出金額) from 家計簿)*100,1) FROM 家計簿 where 費目='食費'

投稿2018/01/05 16:55

編集2018/01/06 01:52
A.Ichi

総合スコア4070

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

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

sanezane

2018/01/06 01:15

ありがとうございます。 実は問題集の解答にもcastでの回答が入っているのですが【 type "number" does not exist ポジション】というエラーが表示されるんです。今勉強している環境がwebの実行環境なんですがコチラに問題があるのでしょうか。
A.Ichi

2018/01/06 01:24 編集

postgresの::は独自なので、cast(HP AS numeric )とするとどうでしょうか?問題集と同じかな?
A.Ichi

2018/01/06 01:26

それでもダメな場合は、HP * 1.00 としてみ下さい。
sanezane

2018/01/06 02:26

hp*1.00でいけました!!ありがとうございます! これで小数点付にするということですね。勉強になりました!
guest

0

そのまま突っ込めば良いのでは?
つHP

投稿2018/01/05 14:43

hichon

総合スコア5737

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

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

sanezane

2018/01/05 14:51

hpを入れてやった結果が画像下の緑枠部なんですが、0.0となってしまうんですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問