説明:
テーブルを結合InsuranceCompanies
し、 LEFT OUTER JOINPatient
を使用して両方のテーブルの列のレコードを結合し、フィルターを適用して25~35歳(これらの境界値を含む) の患者のみを選択する必要があります。CASEステートメントは、患者が男性か女性かを単純にチェックし、値が一致する場合は 1 を割り当て、値が一致しない場合は 0 を割り当てて、2 つの異なる列を計算します。最後に、結果を cname でグループ化し、保険会社名でカウントを取得する必要があります。cid
ケースについての説明:
CASE 式では、クエリは、WHEN 性別フィールド値がfである場合、女性列に値 1 を割り当てることを示しています。値 1 はハード コードされています。これは、クエリが、gender='f' レコードに一致する行が 1 つ見つかったことを意味し、これも 1 を表すためです。人。ELSE 0 を指定することもできますが、暗黙的であるため指定する必要はありません。この CASE 式は、クエリ結果のすべてのレコードに対して評価されます。最後に、1 または 0 のいずれかを含む女性の列を含むすべての行を取得します。この列の女性を合計すると、女性の総数が得られます。男性の列にも同じロジックが適用されます。
COALESCE を使用する場合:
COALESCE
ここでは、NULL 値を 2 番目のパラメーターで指定された値 (この場合はゼロ) に置き換えます。
SQL Fiddle でデモを表示するには、ここをクリックしてください。
スクリプト:
SELECT ic.cname
, COALESCE(SUM(CASE WHEN gender = 'f' THEN 1 END), 0) female
, COALESCE(SUM(CASE WHEN gender = 'm' THEN 1 END), 0) male
FROM InsuranceCompanies ic
LEFT OUTER JOIN Patient p
ON p.cid = ic.cid
AND age BETWEEN 25 AND 35
GROUP BY ic.cname;
出力:
CNAME FEMALE MALE
---------- ------ ----
Clalit Inc 0 2
Harel Inc 2 0
合体なし:
SQL Fiddle でデモを表示するには、ここをクリックしてください
スクリプト:
SELECT ic.cname
, SUM(CASE WHEN gender = 'f' THEN 1 END) female
, SUM(CASE WHEN gender = 'm' THEN 1 END) male
FROM InsuranceCompanies ic
LEFT OUTER JOIN Patient p
ON p.cid = ic.cid
AND age BETWEEN 25 AND 35
GROUP BY ic.cname;
出力:
CNAME FEMALE MALE
---------- ------ ----
Clalit Inc NULL 2
Harel Inc 2 NULL