🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

MySQL

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

SQL

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

Q&A

解決済

1回答

774閲覧

2つのテーブルを結合し、個数 * 値段 をオーダーIDごとにまとめたい

ink88882

総合スコア24

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

MySQL

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

SQL

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

0グッド

0クリップ

投稿2021/03/20 06:49

https://www.w3schools.com
でsqlの練習問題の提出があり、そちらを解こうとしています。

不明点

SQLで2つの表があります。
◼️オーダーテーブル
オーダーID
商品ID
個数

◼️商品テーブル
商品ID
商品名
値段

上記の2つのテーブルをjoinし、
オーダー詳細IDごとの会計を出したいです。

現状試したことなど

二つのテーブルをleft joinで結合し、それぞれの個数 * 値段の合計は出せました。
ですが、それをgroup by でオーダーIDごとにまとめようとするとエラーとなります。

###試しているコード

SELECT オーダー.オーダーID, 個数 * 商品.値段 AS "会計" FROM オーダー LEFT JOIN 商品 ON オーダー.商品ID = 商品.ID)

→結果
オーダーID 会計
1 200 
1 400
1 200
2 100
2 100
3 1000
4 500
4 500

やりたいこととしては、オーダーIDごとに会計をまとめることです。
上記の結果を下記のようにしたいです。

オーダーID 会計
1 800
2 200
3 1000
4 1000

###試したことその2
GROUP BY を試そうと、オーダー.オーダーID
を最後につけると下記のエラーとなります。
You tried to execute a query that does not include the specified expression '個数 * 商品.値段' as part of an aggregate function.

group by はselectの前に実施されるから*が使えない?
といったような情報も見つけ、次に副問合せで上記の表を作ってから試してみました。

SELECT オーダー.オーダーID,"会計" FROM (SELECT オーダー.オーダーID, 個数 * 商品.値段 AS "会計" FROM オーダー LEFT JOIN 商品 ON オーダー.商品ID = 商品.ID) GROUP BY オーダー.オーダーID;

結果->
オーダーIDごとでまとまったようなのですが、なぜか会計が数字ではなく「会計」と言う表示となります。。
※さらに会計の部分が Expr1001 という表示になります。
この名前はカラム名が決まっていない時に出るようなのですが、なぜ決まっていないと判定されるかがわかりませんでした、、!

オーダーID Expr1001
1     会計(数字ではなく会計と言う文字。本来ここは数字であって欲しい)
2     会計
3     会計

原因がわからず、お力添えいただけますと幸いです。
何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こうですかね

sql

1SELECT オーダー.オーダーID,sum(会計) AS ここに項目名 2FROM 3(SELECT オーダー.オーダーID, 個数 * 商品.値段 AS 会計 4 FROM オーダー LEFT JOIN 商品 5 ON オーダー.商品ID = 商品.ID) 6GROUP BY オーダー.オーダーID;

投稿2021/03/20 07:22

編集2021/03/20 07:25
wim

総合スコア17

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

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

ink88882

2021/03/20 07:34

ありがとうございます! sumを使えば副問い合わせなしでもいけました! SELECT オーダー.オーダーID, SUM(個数 * 商品.値段) AS "会計" FROM オーダー LEFT JOIN 商品 ON オーダー.商品ID = 商品.ID) GROUP BY オーダー.オーダーID;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問