SQL入門チュートリアルマニュ...ログイン
SQL入門チュートリアルマニュアル
著者:php.cn  更新時間:2022-04-12 14:15:40

SQL を持つ


SQL HAVINGclause


HAVING句

SQLにHAVING句を追加する その理由は、WHEREキーワードが集計関数で使用できないためです。

HAVING 句を使用すると、グループ化後にデータの各グループをフィルタリングできます。

SQL HAVING 構文

SELECT 列名、集合関数(列名)
FROM テーブル名
WHERE 列名演算子の値
GROUP BY 列名
HAVING 集合関数(列名) 演算子の値;


デモデータベース

このチュートリアルでは、 php サンプル データベースを使用します。

以下は「ウェブサイト」テーブルから選択されたデータです:

+----+-------------+------------ - ---------------+------+-----------+
| 国名 |
-- -+---------------+---------------+----- --+------+
| グーグル https://www.google.cm/ | タオバオ | | 13 | 中国語のウェブサイト |
| | フェイスブック | https://www.facebook.com/ |
| 0 | --------+--------------------------+----------+--- - -----+

以下はWebサイトアクセス記録テーブル「access_log」のデータです:

mysql> SELECT * FROM access_log;
+-----+---------+------ +- -----------+
日付 |
+-----+------+- ----------+
| 2016-05-10 | 230 | 05 - 14 | 2 | 2016 年 5 月 14 日 | 6 | 2016 年 5 月 14 日3 | 220 | 2016-05-15 | 8 | 545 | 2016-05-17 |
----+-------+-----------+
セット内の 9 行 (0.00 秒)



SQL HAVING インスタンス

次に、訪問数が 200 を超える Web サイトの合計。

次の SQL ステートメントを使用します:

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log

INNER JOIN ウェブサイト

ON access_log.site_id=Websites.id)

GROUP BY Websites.name

HAVING SUM(access_log.count) > 200;

上記の SQL を実行すると、出力結果は次のようになります:





ここで、合計訪問数が 200 を超え、Alexa ランキングが 200 未満である Web サイトを検索したいと思います。

SQL ステートメントに共通の WHERE 句を追加します:

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites

INNER JOIN access_log

ON Websites.id=access_log.site_id

WHERE Websites.alexa < 200

Websites.name
HAVING でグループ化 SUM(アクセスログ数) > 200;

上記のSQLを実行した出力結果は以下の通りです: