序章:
HAVING COUNT() は、グループ化された結果をフィルタリングするために SQL で使用されるキーワードであり、通常は GROUP BY と一緒に使用されます。HAVING COUNT() の機能は、グループ化された結果をフィルターし、条件を満たすグループ化された結果のみを保持することです。
Have は、グループ化を行わない Where と似ています。グループ化がある場合、Where はグループ化する前にコンテンツをフィルターし、グループ化した後にコンテンツをフィルターします。集計関数はhaveで書くことができます。
例証します:
メインテーブル CUSTOM_CABINETS 注文テーブル
サブテーブル CUSTOM_CABINETS_BRAND ブランド テーブル
1. すべてのデータの関連付けクエリ
注:内部結合は 2 つのテーブル内の同じデータをクエリするために使用されます。ここでは左結合を使用して問題を再現します。
2. 関連付けクエリとグループ化によるグループ化
ブランド名のメイン table.BRAND_NAME と ブランド コードの サブ table.BRAND_CODE をグループ化すると、クエリの後に空のデータの行があり、メイン行にブランド コード(コードはブランド名に対応する)行がないことを示します。テーブル データなので、グループ化されたデータに NULL があることがわかります。
わかりやすくするために、メインテーブルの count(a.BRAND_CODE) をカウントします。
3. アソシエーションクエリと HAVING COUNT 関数
注意すべき重要な点: グループ化した後、count(*) > 0 を使用してフィルターとクエリを実行します。
HAVING COUNT(a.BRAND_CODE) > 0 NULL を除く、テーブル内の目的のデータをフィルターします。
要約:
- ① INNER JOIN を使用して 2 つのテーブルを結合します。結合条件はカウントする必要がある列です。
SELECT column1, column2, ..., COUNT(column_name)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name
GROUP BY column1, column2, ...
HAVING COUNT(column_name) > 0;
- ② GROUP BY句にカウントしたい列を指定し、COUNT()関数でカウントします。
SELECT column1, column2, ..., COUNT(column_name)
FROM table1
GROUP BY column1, column2, ...
HAVING COUNT(column_name) > 0;
- ③HAVING COUNT()句に集計条件を指定し、集計結果が0以上のグループ化結果のみを保持します。
SELECT column1, column2, ..., COUNT(column_name)
FROM table1
GROUP BY column1, column2, ...
HAVING COUNT(column_name) > 0;