having条件フィルタとwhere条件フィルタリング

1251 ワード

参照
    GROUT BYとHAVING子文を紹介する前に、sql言語の中の特殊な関数について説明しなければなりません。集合関数、例えばSUM、COUNT、MAX、AVGなど。これらの関数と他の関数の根本的な違いは、それらが一般的に複数の記録に作用することである。

    SELECT SUM(population) FROM bbc
参照
ここのSUMはすべての返却記録のpopulationフィールドに作用しています。その結果、このクエリは一つの結果、つまりすべての国の総人口数だけを返します。
GROUT BY子文を使うことにより、SUMとCOUNTのこれらの関数がグループに属するデータに対して作用することができます。GROUT BY regionを指定すると、同じregionに属するデータのセットは1行の値しか戻りません。つまり、表のすべてのフィールドは、SUM、COUNTなどの統合関数で演算され、値を返します。
HAVING子文は私達にグループになった後の各グループのデータを選別させて、WHERE子文は集まる前にまず記録を選別します。
HAVING子文は集合後にグループ記録を選別します。
やはり具体的な例を通して、GROUT BYとHAVING子文を理解し、第三節で紹介したbbc表を採用します。
SQLの例:
一、各地区の総人口数と総面積を表示する:

    SELECT region, SUM(population), SUM(area)
    FROM bbc
    GROUP BY region
参照
    まずregionで戻り記録を複数のグループに分けます。これがGROUT BYの字面の意味です。グループに分けた後、各グループの異なるフィールド(1つまたは複数のレコード)を集計関数で演算します。
二、各地区の総人口数と総面積を表示します。それらの面積が1000万を超える地区だけを表示します。

    SELECT region, SUM(population), SUM(area)
    FROM bbc
    GROUP BY region
    HAVING SUM(area)>1000000
参照
    ここでは、私たちはwhereで1000万を超える地域を選別することができません。このような記録は表に存在しません。
対照的に、HAVING子文はグループになった後の各グループのデータを絞り込みます。