0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

株式会社シンプルウェイAdvent Calendar 2024

Day 24

【ORACLE】GROUP BYで指定したカラム以外はORDER BYできない

Posted at

概要

表題の通り、ORACLEでGROUP BYで指定したカラム以外をORDER BYで使用するとエラーが発生します。その例を挙げて対応策をまとめます。

MySQLではエラーにならないものの、MySQL独自の機能のため使用する場合は明示的に集約関数を使用することを推奨します。

売上(sales)からユーザーIDごとの売上金額(amountの合計)を取得し、売上金額の降順に並べる例。

SELECT
    user_id,
    SUM(amount) total
FROM
    sales
GROUP BY
    user_id
ORDER BY
    amount DESC;

この場合、amountはGROUP BYで使用していないため以下のエラーになります。

SQLSTATE[HY000]: General error: 979 OCIStmtExecute: ORA-00979: GROUP BYの式ではありません。

対応策

以下のように、SUM(amount)をORDER BYに指定することでエラーを解消することができます。

SELECT
    user_id,
    SUM(amount) total
FROM
    sales
GROUP BY
    user_id
ORDER BY
    SUM(amount) DESC;

まとめ

  • ORACLEでは、GROUP BYで指定したカラム以外をORDER BYに指定するとエラーが発生する
  • MySQLではエラーは発生しないが意図しない結果を取得する可能性がある
  • いずれも集約関数を明示的に記述する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?