SQL を持つ
SQL HAVINGclause
HAVING句
SQLにHAVING句を追加する その理由は、WHEREキーワードが集計関数で使用できないためです。
HAVING 句を使用すると、グループ化後にデータの各グループをフィルタリングできます。
SQL HAVING 構文
SELECT 列名、集合関数(列名)
FROM テーブル名
WHERE 列名演算子の値
GROUP BY 列名
HAVING 集合関数(列名) 演算子の値;
FROM テーブル名
WHERE 列名演算子の値
GROUP BY 列名
HAVING 集合関数(列名) 演算子の値;
デモデータベース
このチュートリアルでは、 php サンプル データベースを使用します。
以下は「ウェブサイト」テーブルから選択されたデータです:
+----+-------------+------------ - ---------------+------+-----------+
| 国名 |
-- -+---------------+---------------+----- --+------+
| グーグル https://www.google.cm/ | タオバオ | | 13 | 中国語のウェブサイト |
| | フェイスブック | https://www.facebook.com/ |
| 0 | --------+--------------------------+----------+--- - -----+
例SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
ここで、合計訪問数が 200 を超え、Alexa ランキングが 200 未満である Web サイトを検索したいと思います。SELECT Websites.name, SUM(access_log.count) AS nums FROM
Websites
| 国名 |
-- -+---------------+---------------+----- --+------+
| グーグル 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 ステートメントを使用します:
+-----+---------+------ +- -----------+
日付 |
+-----+------+- ----------+
| 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 句を追加します:
例
INNER JOIN access_log
ON Websites.id=access_log.site_idWHERE Websites.alexa < 200
Websites.nameHAVING でグループ化
SUM(アクセスログ数) > 200;
上記のSQLを実行した出力結果は以下の通りです: