ホームページ >データベース >mysql チュートリアル >GROUP BY 句なしで HAVING を SQL で使用できますか?

GROUP BY 句なしで HAVING を SQL で使用できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-29 18:12:101009ブラウズ

Can HAVING be Used in SQL Without a GROUP BY Clause?

HAVING 句は GROUP BY 句なしで使用できますか?

SQL 標準では、HAVING 句を使用するための特定の基準を概説しています。 GROUP BY 句または外部参照に機能的に依存する列を参照する。ただし、提供されたクエリでは、GROUP BY なしで HAVING を使用できるかどうかという疑問が生じます。

標準 SQL 仕様

標準によれば、HAVING 句は GROUP BY なしで使用できます。 GROUP BY 句は明示的に禁止されていません。ただし、クエリは疑わしい動作を示します:

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)

このクエリは HAVING 句で集計関数 (MAX) を使用していますが、特定の行を選択する必要があることは示していません。したがって、その動作は標準によって厳密に定義されていません。

MySQL 実装

MySQL はこのクエリを暗黙的な GROUP BY 句があるかのように解釈し、行のみを選択します。 NumberOfPages の最大値を指定します。この動作は標準に準拠していません。

標準非準拠の理由

標準では、GROUP BY 句で定義された行のグループを操作するために HAVING 句が必要です。その目的は、集計値に基づいてグループをフィルタリングすることです。 GROUP BY なしで HAVING を使用すると、任意の条件でフィルタリングできるため、予期しない結果が生じる可能性があります。

有効な標準 SQL クエリ

GROUP BY なしで HAVING を使用した有効な標準 SQL クエリ

SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);

このクエリは、最小値があるかどうかを確認します。 NumberOfPages 値が最大値より小さい場合、true の場合は結果「T」を含む単一行が返され、false の場合は空のセットが返されます。この動作は、テーブル全体で動作する集計関数に HAVING を適用するという標準の要件と一致しています。

以上がGROUP BY 句なしで HAVING を SQL で使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。