0

私が持っている2つのテーブル、患者と医師の郵便番号とその郵便番号の呼び出しの数を取得しようとしています。郵便番号 79555 の患者が 5 人いる場合、カウントは 5 になるように、郵便番号を数えることで #of 呼び出しを取得しています。患者テーブルにその郵便番号を持つ 3 人がいて、医師テーブルに 4 人の人がいる場合、郵便番号と7.以下のユニオンを試してみました。一見、やりたいように見えますが、重複する郵便番号を合算したいのですが、合算でsum関数を使えますか?または、結合を作成する必要がありますか?

SELECT zip_code, COUNT(zip_code) AS Num_Patient_Calls FROM patients GROUP BY zip_code
UNION ALL
SELECT zip_code, COUNT(zip_code) AS Num_Physician_Calls FROM physicians GROUP BY zip_code

編集: 解決策 Gordon と dweiss からの応答を使用して、この SQL コードを生成しました。それは、同じ値を持つかどうかに関係なく、無関係なテーブルから 2 つのフィールドを取得し、各テーブルでその値を持つレコードの数を数え、両方のテーブルの結果を合計するという、私が望むことです。例: 患者テーブルに郵便番号 99709 の 6 つのインスタンス、医師テーブルに 1 つのインスタンスがあり、表示される値は 99709 - 7 です。

SELECT zip_code, SUM(Patient_Calls) FROM (
    SELECT zip_code, COUNT(zip_code) AS Patient_Calls FROM patients GROUP BY zip_code
    UNION ALL
    SELECT zip_code, COUNT(zip_code) AS Physician_Calls FROM physicians GROUP BY zip_code
) AS new_table
GROUP BY zip_code ORDER BY `new_table`.`zip_code` 
4

2 に答える 2

3

これらは無関係なテーブルであるため、UNION. また、COUNTSUMは異なる機能であり、この場合は を探していますCOUNT。SUM はすべての値を合計しますがCOUNT、行が a で見つかった回数を示しますGROUP。このようなものはどうですか?

SELECT zip_code,COUNT(*) FROM (
SELECT zip_code AS Num_Patient_Calls FROM patients
UNION ALL
SELECT zip_code AS Num_Physician_Calls FROM physicians
) AS new_table
GROUP BY zip_code
于 2012-05-02T17:46:23.497 に答える
1

質問に答えるには、UNION ALLまたはFULL OUTER JOINのいずれかが必要です。これは、1種類の通話のみの郵便番号がある場合があるためです。

結果を次のように構成します。

select zip_code, sum(Patient_Call) as Num_Patient_Calls,
       sum(Physician_Call) as Num_Physician_Calls,
       sum(Patient_Call + Physician_Call) as Num_Calls
from 
(
  (SELECT zip_code, 1 AS Patient_Call, 0 as Physician_Call
   FROM patients
  )
  UNION ALL
  (SELECT zip_code, 0 AS Patient_Call, 1 as Physician_Call
   FROM physicians
  )
) calls
GROUP BY zip_code

このクエリを複数回実行している場合は、各サブクエリ内で集計を試して、それが高速かどうかを確認できます(たとえば、zip_codeにインデックスがある場合は、高速になる可能性があります)。

于 2012-05-02T18:02:10.160 に答える