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

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

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

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

Q&A

解決済

3回答

3025閲覧

[MySQL]合計して比較したい

neroS2eng

総合スコア16

SQL

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

0グッド

0クリップ

投稿2021/04/06 05:46

編集2021/04/06 05:57

前提・実現したいこと

人口が400(百万人)以上の大陸を表示する。

|id|name|population|continent
|:--|:--:|--:|
|1|日本|126|アジア
|2|中国|1395|アジア
|3|イタリア|60|ヨーロッパ
|4|フランス|64|ヨーロッパ
|5|アメリカ|327|アメリカ

発生している問題・エラーメッセージ

エラーは出ていないのですが、
SUMして比較の仕方が分からず400以上に関わらず
日本(アジア)のみ結果が出てしまっている状況です。

該当のソースコード

SELECT continent from countries HAVING SUM(population) > 400;

試したこと

WHEREでグループ化出来ないエラーになったので、
調べてHAVINGにすればグループはよいという事まで分かりましたが、
肝心の合計値で比較する方法が検索しても解決しませんでした。

お力添えいただけると助かります。
宜しくお願い致します。

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

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

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

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

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

K_3578

2021/04/06 05:54

細かいかもしれませんが表のカラム名が「coninent」になってます
neroS2eng

2021/04/06 05:57

失礼しました…! 修正させて頂きました。
K_3578

2021/04/06 06:06

他の方のコメント欄に書くのもあれなのでこっちに。 >”1054 (42S22): Unknown column 'sumPopulation' in 'where clause'” エラー文落ち着いて読んでみよう。「Unknown column」ってことはそんなカラムはないって 事だよ
neroS2eng

2021/04/06 06:19

SUMの結果をASで命名(代入)して末尾で比較しているという認識なのですが、ASでは比較できないという事でしょうか…?
K_3578

2021/04/06 06:25

結果的に得たいのがcontinentとpopulationの合計値なんだったらyambejpさんの回答を参考にすれば わかるはずです。ヒントは実際テーブルから抽出するのはselectで指定したカラム、ということです
退会済みユーザー

退会済みユーザー

2021/04/06 07:55

having sum(population) > 400 の条件が働かず全大陸のデータが抽出されてしまうとのことですが、 select continent, sum(population) from countries group by continent と select continent, sum(population) from countries group by continent having sum(population) > 400 の結果はどうなるか書いてください。
neroS2eng

2021/04/06 08:44

変わらず、すべての大陸の合計値と大陸名が表示されます…
退会済みユーザー

退会済みユーザー

2021/04/06 09:02

両方の結果を書いてください。もし同じならテーブルの中身がそうなっている(質問者さんの countries テーブルの大陸の合計人口で全ての大陸が 400 を超えている)以外に考えられません。 私の回答を見てください。そうはなってないのがわかりますか? 質問者さんも MySQL のサンプルデータベース world を使ってやってみてください(MySQL をインストールするときに一緒にインストールされていると思います)。内容不明のテーブルをベースにしても話が通じないようですので。
guest

回答3

0

質問者さんの DB では試せないので MySQL のサンプルデータベース world の country テーブル、

イメージ説明

を使って、以下のようにできますが、これは目的に合いませんか?

イメージ説明

投稿2021/04/06 06:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

想定している結果がわからないとなんとも言えませんが・・・

SQL

1select * from countries as t1 2where exists( 3SELECT 1 from countries 4group by continent 5HAVING SUM(population) > 400 and continent=t1.continent)

投稿2021/04/06 06:08

yambejp

総合スコア116724

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

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

neroS2eng

2021/04/06 06:17

回答ありがとうございます! 人口が400万人以上の大陸を表示したいので、この中だと’アジア’と’アジアの合計値'のみ表示出来れば完了なのですが…。
yambejp

2021/04/06 06:28

> 大陸を表示したい 大陸名だけ表示すればよいのですね? SELECT continent from countries group by continent HAVING SUM(population) > 400
neroS2eng

2021/04/06 06:36

ありがとうございます。 これだと、すべての大陸名が表示されてしまいました…。 比較が効いていない理由が分からずすみません…。
yambejp

2021/04/06 06:52

例示されているデータ以外にもっとデータがあるのでは? けっかとして400を超えれば全部表示されるでしょう
neroS2eng

2021/04/07 00:06

すみません、おっしゃる通り合計値が超えていました…! 大変助かりました、ありがとうございました!
guest

0

select sum(population) as sumPopulation from countries where sumPopulation > 400

ではダメ?

投稿2021/04/06 05:52

編集2021/04/06 05:53
nfox

総合スコア231

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

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

K_3578

2021/04/06 05:57 編集

既に修正されていたので削除.
neroS2eng

2021/04/06 06:02

解答ありがとうございます! 試してみたのですが、 ”1054 (42S22): Unknown column 'sumPopulation' in 'where clause'” とエラーが出てしまいました・・・
nfox

2021/04/06 06:17

何かの課題とかでは無いですよね? SELECT SUM(population) AS sumPopulation, continent FROM countries GROUP BY continent HAVING (SUM(population) > 400) で、1521 アジア が取得できます。 ちなみに、MySQL が手元になかったので、Microsoft SQL Server で確認しました。
neroS2eng

2021/04/06 06:39

ありがとうございます! 会社でスプレッドシートを使うので、知識補完の為に自分でやっている練習問題です。 やはり最後のHAVING (SUM(population) > 400)の比較が効いていないのか、すべての大陸が表示されてしまいます…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問