having条件フィルタとwhere条件フィルタリング
1251 ワード
参照
GROUT BYとHAVING子文を紹介する前に、sql言語の中の特殊な関数について説明しなければなりません。集合関数、例えばSUM、COUNT、MAX、AVGなど。これらの関数と他の関数の根本的な違いは、それらが一般的に複数の記録に作用することである。
ここのSUMはすべての返却記録のpopulationフィールドに作用しています。その結果、このクエリは一つの結果、つまりすべての国の総人口数だけを返します。
GROUT BY子文を使うことにより、SUMとCOUNTのこれらの関数がグループに属するデータに対して作用することができます。GROUT BY regionを指定すると、同じregionに属するデータのセットは1行の値しか戻りません。つまり、表のすべてのフィールドは、SUM、COUNTなどの統合関数で演算され、値を返します。
HAVING子文は私達にグループになった後の各グループのデータを選別させて、WHERE子文は集まる前にまず記録を選別します。
HAVING子文は集合後にグループ記録を選別します。
やはり具体的な例を通して、GROUT BYとHAVING子文を理解し、第三節で紹介したbbc表を採用します。
SQLの例:
一、各地区の総人口数と総面積を表示する:
まずregionで戻り記録を複数のグループに分けます。これがGROUT BYの字面の意味です。グループに分けた後、各グループの異なるフィールド(1つまたは複数のレコード)を集計関数で演算します。
二、各地区の総人口数と総面積を表示します。それらの面積が1000万を超える地区だけを表示します。
ここでは、私たちはwhereで1000万を超える地域を選別することができません。このような記録は表に存在しません。
対照的に、HAVING子文はグループになった後の各グループのデータを絞り込みます。
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子文はグループになった後の各グループのデータを絞り込みます。