ホームページ >データベース >mysql チュートリアル >MySQL の複数のテーブルにわたる複数の列からデータを効率的に集計するにはどうすればよいですか?
MySQL の複数テーブルおよび複数列データの効率的な集計方法
結果セットを強化するプロセスでは、多くの場合、各テーブルに対象となる特定の列が含まれる複数のテーブルからのデータを統合する必要があります。ただし、これを実現するために複数の SELECT ステートメントを使用するのは面倒で非効率的になる可能性があります。
次の例に示すように、2 つのテーブルから集計列を取得する必要があるとします。
<code class="language-sql">SELECT * FROM ( SELECT COUNT(DAY_IN) AS arr FROM t_hospital WHERE DAY_IN BETWEEN @start_check AND @finish_check AND RES_DATE BETWEEN @start_res AND @finish_res AND ID_daily_hos = @daily_hos GROUP BY DAY_IN ) e, ( SELECT COUNT(PAT_STATUS) AS ONG1 FROM t_hospital WHERE PAT_STATUS LIKE '%ong%' AND DAY_IN BETWEEN @start_check AND @finish_check AND RES_DATE BETWEEN @start_res AND @finish_res AND ID_daily_hos = @daily_hos GROUP BY DAY_IN ) a, ( SELECT COUNT(PAT_STATUS) AS RTED FROM t_hospital WHERE PAT_STATUS LIKE '%rtde%' AND DAY_IN BETWEEN @start_check AND @finish_check AND RES_DATE BETWEEN @start_res AND @finish_res AND ID_daily_hos = @daily_hos GROUP BY DAY_IN ) b, ( SELECT COUNT(PAT_STATUS) AS POLI FROM t_hospital WHERE PAT_STATUS LIKE '%pol%' AND DAY_IN BETWEEN @start_check AND @finish_check AND RES_DATE BETWEEN @start_res AND @finish_res AND ID_daily_hos = @daily_hos GROUP BY DAY_IN ) c, ( SELECT COUNT(PAT_STATUS) AS para FROM t_hospital WHERE PAT_STATUS LIKE '%para%' AND DAY_IN BETWEEN @start_check AND @finish_check AND RES_DATE BETWEEN @start_res AND @finish_res AND ID_daily_hos = @daily_hos GROUP BY DAY_IN ) d</code>
このアプローチでは、最初の列だけが正しく表示され、他の列の結果が間違っているという問題がよく発生します。
解決策は、単一の SELECT ステートメントと条件付き集計を使用することです。
<code class="language-sql">SELECT DAY_IN, COUNT(*) AS arr, SUM(IF(PAT_STATUS LIKE '%ong%', 1, 0)) AS ONG1, SUM(IF(PAT_STATUS LIKE '%rtde%', 1, 0)) AS RTED, SUM(IF(PAT_STATUS LIKE '%pol%', 1, 0)) AS POL1, SUM(IF(PAT_STATUS LIKE '%para%', 1, 0)) AS para FROM t_hospital WHERE DAY_IN BETWEEN @start_check AND @finish_check AND RES_DATE BETWEEN @start_res AND @finish_res AND ID_daily_hos = @daily_hos GROUP BY DAY_IN</code>
この変更されたステートメントでは、条件付き集計は IF() 関数を使用して各行の特定の PAT_STATUS パターンを評価し、一致するパターンの数を増やします。次に、SUM() 関数はこれらのカウントを集計して、目的の結果セットを生成します。
以上がMySQL の複数のテーブルにわたる複数の列からデータを効率的に集計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。