問題:
グループ内の特定の数のエントリを持つ行のグループを検索する必要があります。
例:
データベースには、product
次の列にデータがあります:id
、name
およびcategory
。
id | 名前 | カテゴリ |
---|---|---|
1 | ソファ | 家具 |
2 | 手袋 | 衣類 |
3 | Tシャツ | 衣類 |
4 | 椅子 | 家具 |
5 | デスク | 家具 |
6 | 見る | エレクトロニクス |
7 | アームチェア | 家具 |
8 | スカート | 衣類 |
9 | ラジオ受信機 | エレクトロニクス |
3つ以上のエントリがある製品のカテゴリを見つけましょう。
解決策:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
結果は次のとおりです。
カテゴリ | カウント |
---|---|
家具 | 4 |
衣類 | 3 |
ディスカッション:
グループ内の指定された行数に従ってレコードをフィルタリングするには、HAVING句を使用します。 COUNTなどの条件集計関数を使用して行をフィルタリングします。まず、SELECTで、1つまたは複数の列の名前を使用して行をグループ化し(これはこの例ではカテゴリです)、次に各グループのレコード数を集計する集計関数COUNTを配置します。行数をカウントするには、一意の値を格納するid列を使用します(この例では、COUNT(id)
を使用します )。次に、GROUP BY句を使用して、列に従ってレコードをグループ化します(GROUP BY
上記のカテゴリ)。 GROUP BYを使用してCOUNTなどの集計関数でレコードをフィルタリングした後、HAVING句を使用します。常にGROUPBY句の後に使用されます。 HAVINGでは、条件を使用して、値を集計関数によって返される値と比較します。この例では、COUNT(id)が2より大きい値を返すかどうかを比較します。 trueの場合、カテゴリは製品数とともに返されます。