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

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

新規登録して質問してみよう
ただいま回答率
85.31%
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回答

7133閲覧

GROUP BY 後に、レコード数を出力したい

tomptei_nickow

総合スコア7

MySQL

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

SQL

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

0グッド

0クリップ

投稿2020/02/25 09:32

実現したいこと

下記、TABLE 1があります。
それを "MONTH = 1 or 2" となるTABLE 2に成形し、そのTABLE 2のレコード数を出力したいです。

(TABLE 1)

MONTHDAYNAMEDATA
11A100
11B103
11C105
12A101
12B104
12C105
21A100
21B103
21C105
21D101
22A101
22B104
22C105
21D101
31A100
31B103
31C105
32A101
32B104
32C105

(TABLE 2)

NAMEDATA
A402
B414
C420
D202

該当のソースコード

TABLE 2は下記のビューを用いて導出できます。

SQL

1SELECT 2 NAME, 3 SUM(DATA) 4FROM TABLE1 5WHERE MONTH BETWEEN 1 AND 2 6GROUP BY NAME

上記からTABLE 2のレコード数の出力は下記で実現できると考えましたがエラーになります。

SQL

1SELECT COUNT(*) 2FROM ( 3 SELECT 4 NAME, 5 SUM(DATA) 6 FROM TABLE1 7 WHERE MONTH BETWEEN 1 AND 2 8 GROUP BY NAME 9)

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

下記、メッセージが出ます。

Error Code: 1248. Every derived table must have its own alias

どのようにすれば、レコード数を出力できるのでしょうか。ご教示ください。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

DBはMySQLです。

TABLE 1は下記でCREATEしています。

SQL

1CREATE TABLE TABLE1 ( 2 `MONTH` INT(2) NOT NULL, 3 `DAY` INT(2) NOT NULL, 4 `NAME` CHAR(4) NOT NULL, 5 `DATA` INT(4) NULL, 6 PRIMARY KEY (`MONTH`, `DAY`, `NAME`))

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずはマニュアルを読みましょう。

エラーコードから、

エラー: 1248 SQLSTATE: 42000 (ER_DERIVED_MUST_HAVE_ALIAS)
メッセージ: 導出表にはエイリアスが必須です。

であると分かります。つまり、FROM 句に使っている SELECT した表(導出表)に名前を付けてやる必要があります。

SQL

1SELECT COUNT(vt1.name) 2FROM ( 3 SELECT 4 NAME, 5 SUM(DATA) 6 FROM TABLE1 7 WHERE MONTH BETWEEN 1 AND 2 8 GROUP BY NAME 9) vt1

投稿2020/02/25 09:50

tacsheaven

総合スコア13707

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

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

tomptei_nickow

2020/02/25 10:56

ご回答ありがとうございました。 基本的なミスでしたね。 導出表に名前をつけることで、望む結果を出すことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問