問題:
グループ内の特定の数のエントリを持つ行のグループを検索する必要があります。
例:
データベースには、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の場合、カテゴリは製品数とともに返されます。