ホームページ > データベース > mysql チュートリアル > SQL クエリで「単一グループのグループ関数ではありません」エラーが発生するのはなぜですか?

SQL クエリで「単一グループのグループ関数ではありません」エラーが発生するのはなぜですか?

DDD
リリース: 2024-12-23 16:30:17
オリジナル
748 人が閲覧しました

Why Does My SQL Query Produce a

SQL の「単一グループ グループ関数ではありません」エラーについて

SQL では、次のような単一グループ グループ関数が使用されます。 MAX()、SUM()、または AVG() は、指定されたグループ化列に同じ値を持つ行のグループに適用されます。ただし、グループ関数とともに SELECT リストに個々の列式を含めようとして、それらの式のすべてを GROUP BY 句に含めないと、「単一グループのグループ関数ではありません」というエラーが発生します。

問題の説明

サンプル SQL ステートメントでは、提供:

SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN
ログイン後にコピー

クエリは、一意の SSN ごとに TIME の合計の最大値を計算し、その最大値に関連付けられた SSN を返そうとします。ただし、このクエリには根本的な問題があります。

  • 式 MAX(SUM(TIME)) は、各 SSN の TIME の最大合計を計算する単一グループのグループ関数です。定義上、これは、各 SSN に対して結果が 1 つだけ存在することを意味します。
  • SELECT リストに個々の列式 SSN を含めることは、SELECT リストに含まれるすべての個々の列式も、 GROUP BY 句。

解決策

このエラーを解決するには、次のようにします。 3 つのオプションがあります:

  • SELECT リストから個々の列式 (SSN) を削除します: これにより、関連付けられた SSN を含まない TIME の最大合計が得られます。
  • 個々の列式 (SSN) を GROUP BY 句に追加します。 これにより、両方の SSN によって結果がグループ化されます。と TIME を使用して、TIME の最大合計に関連付けられた SSN を取得できます。
  • サブクエリを使用します: サブクエリを使用して TIME の最大合計を取得し、その値を使用できます。別のクエリで、関連付けられた SSN を識別します。

オプションを使用したクエリの例2

SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN, TIME
ログイン後にコピー

このクエリは SSN と TIME の両方で結果をグループ化し、各 SSN の TIME の最大合計に関連付けられた SSN を取得できます。

以上がSQL クエリで「単一グループのグループ関数ではありません」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート