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

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

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

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

SQL

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

Q&A

1回答

577閲覧

GROUP BYを使用する際の定義について

k.k

総合スコア1

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

SQL

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

0グッド

0クリップ

投稿2023/02/27 06:24

編集2023/02/27 15:25

実現したいこと

CASE句を含むSQLを実行し、条件分岐を行なうと同時にGROUP BYで括りたい

前提

元々あったSQLのコードを、CASE句を書き加え条件分岐で表示しようとしています。
ただ、実行を行ったところ、「GROUP BYの式ではありません」とエラーがでてしまいました。

GROUP BY の中に一行追加したところ正しく表示されたのですが、何故この一行を追加したことで正しく表示されるのかがいまいち分かっていません。
(GROUP BY には集計関数を除いてSELECTと完全に一致させる必要があるかと思っていたのですが、今回追加した一文はCASE句のELSEには指定していますが、SELECTに直接指定していません)

どなたか解説いただけませんか?
よろしくお願いします。

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

ORA-00979: GROUP BYの式ではありません。
00979. 00000- “not a GROUP BY expression”
*Cause:
*Action
行1列1,538でエラー

該当のソースコード及び改良コード

Oracle SQL Developer上にて実行

SELECT
substr(log.REQUEST_INFO,instr(log.REQUEST_INFO,’cyohyoID:[’) + 10) as 帳票ID,
CASE
WHEN usr.BUSYO_CD IN (’014’, ’023’) THEN ’〇’
WHEN usr.BUSYO_CD IN (’064’) THEN ’△’
WHEN usr.BUSYO_CD IN (’065’) THEN ’□’
WHEN usr.BUSYO_CD IN (’066’) THEN ’×’
ELSE code_tiiki.CODE_NAME
END as 地域,
COUNT(*) as 回数

FROM
log_table log
LEFT JOIN user_table usr
on log.user_id = usr.user_id
LEFT JOIN
(SELECT CODE_KBN, CODE, CODE_NAME
FROM code_table
WHERE CODE_KBN = ’AH’) code_tiiki
on usr.TIIKI_CD = code_tiiki.CODE

WHERE
log.time BETWEEN ‘2022/12/26’ and ‘2023/01/25’

GROUP BY
substr(log.REQUEST_INFO,instr(log.REQUEST_INFO,’cyohyoID:[’) + 10),
CASE
WHEN usr.BUSYO_CD IN (’014’, ’023’) THEN ’〇’
WHEN usr.BUSYO_CD IN (’064’) THEN ’△’
WHEN usr.BUSYO_CD IN (’065’) THEN ’□’
WHEN usr.BUSYO_CD IN (’066’) THEN ’×’
ELSE code_tiiki.CODE_NAME
END;

---以下のようにGROUP BY句の中に一行追加したところエラーが解消されたのですが、
SELECTに直接指定していない一文をGROUP BY に加えてなぜエラーが解消したのかが分かりません、、---

GROUP BY
substr(log.REQUEST_INFO,instr(log.REQUEST_INFO,’cyohyoID:[’) + 10),
CASE
WHEN usr.BUSYO_CD IN (’014’, ’023’) THEN ’〇’
WHEN usr.BUSYO_CD IN (’064’) THEN ’△’
WHEN usr.BUSYO_CD IN (’065’) THEN ’□’
WHEN usr.BUSYO_CD IN (’066’) THEN ’×’
ELSE code_tiiki.CODE_NAME
END,
code_tiiki.CODE_NAME; ← 今回追加した一文

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

Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - ProductionVersion 18.11.0.0.0

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

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

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

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

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

guest

回答1

0

WHERE句が2つ続いているのはエラーになる。
2つ目のWHEREはANDの間違いでは?

SQL

1WHERE CODE_KBN = ’AH’) code_tiiki on use.TIIKI_CD = code.CODE) 2 3WHERE 4log.time BETWEEN2022/12/26and2023/01/25

ELSE行の最後の , も余計でエラーになる。

SQL

1ELSE code_tiiki.CODE_NAME, 2END,

質問へのコメントを直す気はないの?
ちゃんとチェックするには質問の修正が必要。

投稿2023/02/27 12:37

Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問