mysql では、グループ化されたデータをフィルタリングするには、have キーワードを SELECT ステートメントと一緒に使用する必要があります。構文は、「SELECT {*|フィールド列名} FROM データ テーブル名 HAVING クエリ条件;」です。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
MySQL では、HAVING キーワードを使用してグループ化されたデータをフィルターできます。
HAVING キーワードを使用するための構文形式は次のとおりです。
HAVING 查询条件;
HAVING キーワードと WHERE キーワードの両方を使用してデータをフィルタリングでき、HAVING は WHERE 内のすべての演算子と構文をサポートします。キーワード。
ただし、WHERE キーワードと HAVING キーワードには次のような違いもあります。
一般に、WHERE はデータ行のフィルタリングに使用され、HAVING はグループのフィルタリングに使用されます。
集計関数は WHERE クエリ条件では使用できませんが、集計関数は HAVING クエリ条件では使用できます。
WHERE はデータをグループ化する前にフィルターしますが、HAVING はデータをグループ化した後にフィルターします。
WHERE はデータベース ファイルに対してフィルターを適用し、HAVING はクエリ結果に対してフィルターを適用します。つまり、WHERE はデータ テーブル内のフィールドに基づいて直接フィルタリングするのに対し、HAVING は以前にクエリされたフィールドに基づいてフィルタリングします。
フィールド エイリアスは WHERE クエリ条件では使用できませんが、フィールド エイリアスは HAVING クエリ条件では使用できます。
次の例では、WHERE キーワードと HAVING キーワードの類似点と相違点をより直感的に理解できます。
例 1
HAVING キーワードと WHERE キーワードを使用して、tb_students_info テーブル内の身長が 150 を超える学生の名前、性別、身長をクエリします。 SQL文と実行結果は以下のとおりです。
mysql> SELECT name,sex,height FROM tb_students_info -> HAVING height>150; +--------+------+--------+ | name | sex | height | +--------+------+--------+ | Dany | 男 | 160 | | Green | 男 | 158 | | Henry | 女 | 185 | | Jane | 男 | 162 | | Jim | 女 | 175 | | John | 女 | 172 | | Lily | 男 | 165 | | Susan | 男 | 170 | | Thomas | 女 | 178 | | Tom | 女 | 165 | +--------+------+--------+ 10 rows in set (0.00 sec) mysql> SELECT name,sex,height FROM tb_students_info -> WHERE height>150; +--------+------+--------+ | name | sex | height | +--------+------+--------+ | Dany | 男 | 160 | | Green | 男 | 158 | | Henry | 女 | 185 | | Jane | 男 | 162 | | Jim | 女 | 175 | | John | 女 | 172 | | Lily | 男 | 165 | | Susan | 男 | 170 | | Thomas | 女 | 178 | | Tom | 女 | 165 | +--------+------+--------+ 10 rows in set (0.00 sec)
上の例では、高さフィールドが SELECT キーワードの後にクエリされているため、HAVING と WHERE の両方を使用できます。ただし、SELECT キーワードの後に高さフィールドがクエリされない場合、MySQL はエラーを報告します。
例 2
HAVING キーワードと WHERE キーワードを使用して、tb_students_info テーブル内の身長が 150 を超える学生の名前と性別をクエリします (例 1 と比較)。今回は高さフィールドのクエリはありません)。 SQL文と実行結果は以下のとおりです。
mysql> SELECT name,sex FROM tb_students_info -> WHERE height>150; +--------+------+ | name | sex | +--------+------+ | Dany | 男 | | Green | 男 | | Henry | 女 | | Jane | 男 | | Jim | 女 | | John | 女 | | Lily | 男 | | Susan | 男 | | Thomas | 女 | | Tom | 女 | +--------+------+ 10 rows in set (0.00 sec) mysql> SELECT name,sex FROM tb_students_info HAVING height>150; ERROR 1054 (42S22): Unknown column 'height' in 'having clause'
結果から、HAVING クエリ条件で使用されている高さフィールドが SELECT キーワードの後にクエリされない場合、MySQL はエラー メッセージを表示することがわかります。「having 句の列 "height"」 " は不明です。"
例 3
身長フィールドに従って tb_students_info テーブルのデータをグループ化し、HAVING キーワードと WHERE キーワードを使用して、身長フィールドに基づいて学生をクエリします。グループ化後の平均身長は170以上 名前、性別、身長 SQL文と実行結果は以下の通り
mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info -> GROUP BY height -> HAVING AVG(height)>170; +--------------------+------+--------+ | GROUP_CONCAT(name) | sex | height | +--------------------+------+--------+ | John | 女 | 172 | | Jim | 女 | 175 | | Thomas | 女 | 178 | | Henry | 女 | 185 | +--------------------+------+--------+ 4 rows in set (0.00 sec) mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info WHERE AVG(height)>170 GROUP BY height; ERROR 1111 (HY000): Invalid use of group function
結果からわかるように、WHEREクエリ条件に集計関数を使用した場合、MySQL はエラー メッセージを表示します: Invalid use of group function.
【関連する推奨事項: mysql ビデオ チュートリアル 】
以上がmysqlのhavingキーワードの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。