SELECT SUB.A ,SUB.B ,SUB.C FROM ( SELECT A ,B ,C ,D ,E FROM A )SUB GROUP BY SUB.A ,SUB.B ,SUB.C ORDER BY SUB.D ,SUB.E
これが実行できない理由は何でしょうか?実行できると思いきや、できませんでした。GROUP BY の式ではありませんと怒られました。
ご回答お待ちしております。

回答4件
あなたの回答
tips
プレビュー
Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。
Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。
Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。
Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。
Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。
Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。
Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
0グッド
0クリップ
投稿2017/06/08 11:55
SELECT SUB.A ,SUB.B ,SUB.C FROM ( SELECT A ,B ,C ,D ,E FROM A )SUB GROUP BY SUB.A ,SUB.B ,SUB.C ORDER BY SUB.D ,SUB.E
これが実行できない理由は何でしょうか?実行できると思いきや、できませんでした。GROUP BY の式ではありませんと怒られました。
ご回答お待ちしております。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
端的にいえば集計しない式にGROUP BY はつかってはいけないというだけですね
これ以上は具体的なサンプルを提示してもらわないと説明しづらいです
投稿2017/06/09 00:26
総合スコア118037
0
ベストアンサー
GROUP BY句はグループ関数をセットで使うのが掟です。
今回はDISTINCTを使えば済むのでは?
SQL
1SELECT 2 SUB.A 3 ,SUB.B 4 ,SUB.C 5FROM 6 ( 7 SELECT DISTINCT 8 A 9 ,B 10 ,C 11 ,D 12 ,E 13 FROM A 14 ORDER BY 15 D 16 ,E 17 ) SUB
投稿2017/06/08 17:32
総合スコア16419
0
GROUP BY
SUB.A
,SUB.B
,SUB.C
ORDER BY
SUB.D
,SUB.E
A,B,Cでグループ化して1件(1行)にまとめていますから、
DとEで並び替えはできません。
やるならMAX(D)やSUM(E)などを使うしかありません。
投稿2017/06/08 12:01
総合スコア880
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
以下のように単純化し、これをcolAでGROUP BYし、colBでORDER BYするということが出来るかどうか考えてみましょう。
colA | colB |
---|---|
0 | X |
0 | Y |
1 | Y |
1 | Z |
まずSQLの処理の順序としてGROUP BYはORDER BYより先に適用されます。つまりORDER BY colBはGROUP BY colAで集約された結果に対して適用されますが、この時colBにはどのような値が入っているのでしょうか。
colA | colB |
---|---|
0 | ? |
1 | ? |
集約結果の1行は元のテーブルの複数行から成り立っているため、そこに対してcolBを一意に決めることはできませんよね?従ってcolBでORDER BYすることもできません。
投稿2017/06/08 14:54
編集2017/06/08 14:55総合スコア1149
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。