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

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

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

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

Q&A

6回答

24566閲覧

oracleのSQLでエラーになるのですが原因がわかりません。

horse1223

総合スコア8

SQL

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

0グッド

0クリップ

投稿2016/08/04 11:32

編集2016/08/04 13:17

###前提・実現したいこと
このSQLを実行したところエラーになってしまいました。
なぜエラーになるのかわかりません。
ご教授お願いします。

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

ORA-00979: GROUP BYの式ではありません。

###該当のソースコード

lang

1SELECT TO_CHAR(A.RDL522T_JISSI_YMD,'YYYYMM') AS TAISYO_YM 2 ,A.522T_JYU_SYA_CD AS JYU_SYA_CD 3 ,B.014P_JYU_JIGYOSYO_CD AS JYU_JIGYOSYO_CD 4 ,A.522T_JYU_SYAIN_CD AS JYU_SYAIN_CD 5 ,B.014P_JYU_NAME AS JYU_SYAIN_NM 6 ,(SELECT C.CHIRASHI_HAIFU_TESURYO 7 FROM (SELECT TO_CHAR(CA.524T_JISSI_YMD,'YYYYMM') AS JISSI_YMD 8 ,CA.524T_JYU_SYAIN_CS AS JYU_SYAIN_CD 9 ,SUM(CEIL(CA.524T_HAIFU_JISSEKI_SU * CB.RDL366P_KEN_TANTO_TANKA)) AS CHIRASHI_HAIFU_TESURYO 10 FROM RDL524T_CHIRASHI_HAIFU_JISSEKI CA 11 ,RDL366P_CHIRASHI_HAIFU_YOTEI CB 12 WHERE TO_CHAR(CA.RDL524T_JISSI_YMD,'YYYYMM') = TO_CHAR(CA.RDL366T_JISSI_TAISYO_YMD,'YYYYMM') 13 AND CA.RDL524T_JYU_JIGYOSYO_CD = CB.RDL366P_JYU_JIGYOSYO_CD 14 AND CA.CHIRASHI_KANRI_NO= AND CB.CHIRASHI_KANRI_NO 15 GROUP BY TO_CHAR(CA.524T_JISSI_YMD,'YYYYMM'),CA.524T_JYU_SYAIN_CD) C 16 WHERE TO_CHAR(A.522T_JISSI_YMD,'YYYYMM') = TO_CHAR(C.JISSI_YMD(+),'YYYYMM') 17 AND A.522T_JYU_SYAIN_CD = C.JYU_SYAIN_CD(+)) 18 FROM RDL522T_JYU_SYAIN_NIPPO A 19 ,RDL014P_JYU_SYAIN B 20WHERE A.522T_SHITEN_SYONIN_DATE IS NOT NULL 21 AND A.522T_JYU_SYA_CD = B.014P_JYU_SYA_CD 22 AND A.522T_JYU_SYAIN_CD = B.014P_JYUIN_SYA_CD 23GROUP BY TO_CHAR(A.522T_JISSI_YMD,'YYYYMM'),A.RDL522T_JYU_SYA_CD,A.522T_JYU_SYAIN_CD,B.RDL014P_JYU_JIGYOSYO_CD,B.RDL014P_JYU_NM

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

A.Ichi

2016/08/04 11:59

522T_JISSI_DATEの(YMD)の間違いでは無いですよね?テーブル項目が見れないので
horse1223

2016/08/04 12:20

DATEじゃなくてYMDです。打ち間違いです。
asahina_dev

2016/08/04 12:37

コードブロック付与して インデント合わせてください
horse1223

2016/08/04 13:18

インデント合わせ、誤字修正しました。
guest

回答6

0

一番外のSELECT句に書かれている副問い合わせがGROUP BYの項目に入ってないからですね
一番外のSELECTでは集約関数を使っていないようですし各1件ずつ欲しいだけならDISTINCTにしてはいかがでしょう?
以下のようにSELECT句の中のSELECT文をFROMの副問い合わせにしたほうがいいとは思いますが・・・

SQL

1SELECT 2 -- 一件ずつ欲しいだけなら一番下のGROUP BYをなくしてここでDISTINCTがおすすめ 3 -- DISTINCT 4 TO_CHAR(A.RDL522T_JISSI_YMD,'YYYYMM') AS TAISYO_YM 5 , A.522T_JYU_SYA_CD AS JYU_SYA_CD 6 , B.014P_JYU_JIGYOSYO_CD AS JYU_JIGYOSYO_CD 7 , A.522T_JYU_SYAIN_CD AS JYU_SYAIN_CD 8 , B.014P_JYU_NAME AS JYU_SYAIN_NM 9 , C.CHIRASHI_HAIFU_TESURYO 10FROM 11 RDL522T_JYU_SYAIN_NIPPO A 12 , RDL014P_JYU_SYAIN B 13 , ( 14 SELECT 15 TO_CHAR(CA.524T_JISSI_YMD,'YYYYMM') AS JISSI_YMD 16 , CA.524T_JYU_SYAIN_CS AS JYU_SYAIN_CD 17 , SUM(CEIL(CA.524T_HAIFU_JISSEKI_SU * CB.RDL366P_KEN_TANTO_TANKA)) AS CHIRASHI_HAIFU_TESURYO 18 FROM 19 RDL524T_CHIRASHI_HAIFU_JISSEKI CA 20 , RDL366P_CHIRASHI_HAIFU_YOTEI CB 21 WHERE TO_CHAR(CA.RDL524T_JISSI_YMD,'YYYYMM') = TO_CHAR(CA.RDL366T_JISSI_TAISYO_YMD,'YYYYMM') 22 AND CA.RDL524T_JYU_JIGYOSYO_CD = CB.RDL366P_JYU_JIGYOSYO_CD 23 AND CA.CHIRASHI_KANRI_NO= AND CB.CHIRASHI_KANRI_NO 24 GROUP BY 25 TO_CHAR(CA.524T_JISSI_YMD,'YYYYMM') 26 , CA.524T_JYU_SYAIN_CD 27 ) C 28WHERE A.522T_SHITEN_SYONIN_DATE IS NOT NULL 29 AND A.522T_JYU_SYA_CD = B.014P_JYU_SYA_CD 30 AND A.522T_JYU_SYAIN_CD = B.014P_JYUIN_SYA_CD 31 AND TO_CHAR(A.522T_JISSI_YMD,'YYYYMM') = TO_CHAR(C.JISSI_YMD(+),'YYYYMM') 32 AND A.522T_JYU_SYAIN_CD = C.JYU_SYAIN_CD(+) 33-- 集約関数を使わないならここでGROUP BYではなくDISTINCTがおすすめ 34GROUP BY 35 TO_CHAR(A.522T_JISSI_YMD,'YYYYMM') 36 , A.RDL522T_JYU_SYA_CD 37 , A.522T_JYU_SYAIN_CD 38 , B.RDL014P_JYU_JIGYOSYO_CD 39 , B.RDL014P_JYU_NM 40 , C.CHIRASHI_HAIFU_TESURYO 41

投稿2016/08/05 01:26

kutsulog

総合スコア985

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

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

Panzer_vor

2016/08/05 03:05

横槍ですが…。 集約関数使わないないなら意図を明確にする上でもSELECT DISTINCTで正解かと思うのですが、 なぜか周りであまり使われる機会の少ないキーワードなんですよね…
kutsulog

2016/08/05 04:26

たぶんパフォーマンスの面からDISTINCTが遅いと書いてあるWebページが少なからずあるからじゃないでしょうか? (その割にはもっと速いと書かれてたりするNOT EXISTSを使った場合をそんなに見ないですが…) 実際に計測してみて有意な差があるのでなければDISTINCTのほうがすっきりかけるから好きなんですけど
Panzer_vor

2016/08/05 10:58

全くもって同意です。 DISTINCTを利用したことがボトルネックになる場合は避けるべきですが、そうでない場合はコードの見易いDISTINCTを使って欲しいところですね。 変にGROUP BYされると、 集約関数が使われてると勘ぐってしまいますし^^;
guest

0

SQL関係の質問はCREATE TABLE文等も載せた方が解決が早いです。

ぱっと見て、
SELECTの並びの

TO_CHAR(A.RDL522T_JISSI_YMD,'YYYYMM') AS TAISYO_YM

...
GROUP BY 句の並びの

TO_CHAR(A.522T_JISSI_DATE,'YYYYMM')

の列名
A.RDL522T_JISSI_YMD
A.522T_JISSI_DATE
が違う列ですから、エラーになるかと。他の列も間違いがあるかも?

質問とは関係ありませんが、ローマ字表のヘボンとヘボン以外を混在させるのは止めた方がいいです。
ヘボン式ローマ字

投稿2016/08/04 12:29

Orlofsky

総合スコア16415

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

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

0

Orlofsky さんが正しいです。

Orlofskyさんの指摘通り、他の箇所にも
同じように間違えている個所が多々ありますよ!
大きなGROUP BYのところで4か所。
小さなGROUP BYのところで1ヶ所。。

SELECT 句のカラム名(AS ~の部分ではない)で
ちゃんとGROUP BYされているか、
目視ではなくコピーして検索をする形で確認してください。

あと、年月、社員単位の手数料合計を算出しようとしているんだとは思いますが…
SQLとして変な部分(コピーか打ち間違えか分かりませんが)もあるので、
エラーが取れても期待している結果は出ないかも?

投稿2016/08/28 17:21

tomari_perform

総合スコア760

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

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

0

回答ではなくアドバイスですが。

GROUP BY絡みで発生するエラーとしては、SELECT項目に実はGROUP BYしたカラム以外を指定しているパターンが一番多いですよね。

こういうケースでは、
修正したいクエリをそのままいじると深みにハマることもしばしばなので、

一度元のクエリは別ファイルかなんかに退避しといて、
SELECT句の部分を一度クリアし、GROUP BYで指定した箇所をそのままコピペしちゃいましょう。
(そもそもGROUP BY指定したカラム以外は単純にSELECTできないので)

それでクエリが実行できることを確認してから、集約関数とかかける部分を追記していけば効率が良いかなと思います。

投稿2016/08/04 13:39

Panzer_vor

総合スコア1636

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

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

0

group by で????の箇所に集合関数(SUM,AVE,MAX...)が必要では???

SELECT TO_CHAR(A.RDL522T_JISSI_YMD,'YYYYMM') AS TAISYO_YM
,A.522T_JYU_SYA_CD AS JYU_SYA_CD
,B.014P_JYU_JIGYOSYO_CD AS JYU_JIGYOSYO_CD
,A.522T_JYU_SYAIN_CD AS JYU_SYAIN_CD
,B.014P_JYU_NAME AS JYU_SYAIN_NM
,????(SELECT C.CHIRASHI_HAIFU_TESURYO

投稿2016/08/04 13:10

A.Ichi

総合スコア4070

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

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

0

sql

1SELECT to_char(ca.524t_jissi_ymd,'YYYYMM') AS jissi_ymd , 2 ca.524t_jyu_syain_cs AS jyu_syain_cd , 3 SUM(ceil(ca.524t_haifu_jisseki_su * cb.rdl366p_ken_tanto_tanka)) AS chirashi_haifu_tesuryo 4FROM rdl524t_chirashi_haifu_jisseki ca , 5 rdl366p_chirashi_haifu_yotei cb 6WHERE to_char(ca.rdl524t_jissi_ymd,'YYYYMM') = to_char(ca.rdl366t_jissi_taisyo_ymd,'YYYYMM') 7AND ca.rdl524t_jyu_jigyosyo_cd = cb.rdl366p_jyu_jigyosyo_cd 8AND ca.chirashi_kanri_no= 9AND cb.chirashi_kanri_no 10GROUP BY to_char(ca.524t_jissi_date,'YYYYMM', ca.524t_jyu_syain_cd

Group by と Select の集合関数を利用してない項目が違う

投稿2016/08/04 12:42

編集2016/08/04 12:43
asahina_dev

総合スコア610

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問