2

こんにちは、同じ列名を共有する 2 つのテーブルからデータを取得したいと考えています。私のテーブル構造は

テーブル患者

 ---------------------------------------
|  id  |  affiliate_id  |  somecolumn  |
 ---------------------------------------
|  1   |    8           |  abc         |          
 ---------------------------------------
|  2   |    8           |  abc         |          
 ---------------------------------------
|  3   |    9           |  abc         |          
 ---------------------------------------

テーブルリード

 ---------------------------------------
|  id  |  affiliate_id  |  someothern  |
 ---------------------------------------
|  1   |    8           |  xyz         |          
 ---------------------------------------
|  2   |    8           |  xyz         |          
 ---------------------------------------
|  3   |    3           |  xyz         |          
 ---------------------------------------

私の要件はCOUNT(ID)、単一のクエリで両方のテーブルから取得することでした。のような結果が欲しい

 ----------------------------------------------------
|  affiliate_id  |  total_patients  |  total_leads  |
 ----------------------------------------------------
|       8        |        2         |       2       |          
 ----------------------------------------------------
|       9        |        1         |       0       |          
 ----------------------------------------------------
|       3        |        0         |       1       |          
 ----------------------------------------------------

次のクエリを書きました

SELECT `p`.`affiliate_id`, COUNT(p.id) AS `total_patients`, 
   COUNT(cpl.id) AS `total_leads` 
FROM `patients` AS `p` 
   INNER JOIN `leads` AS `cpl` ON p.affiliate_id =cpl.affiliate_id  
GROUP BY `p`.`affiliate_id`

しかし、結果が得られません。このクエリの結果、total_patients と total_leads の数が同じ 1 つのアフィリエイトのみが返されます

4

2 に答える 2

3

問題は、最初に個別のリストを取得してaffiliate_idから、他のテーブルに結合して結果を取得する必要があることです。

select a.affiliate_id,
  count(distinct p.id) total_patients,
  count(distinct l.id) total_leads
from
(
  select affiliate_id
  from patients
  union 
  select affiliate_id
  from leads
) a
left join patients p
  on a.affiliate_id = p.affiliate_id
left join leads l
  on a.affiliate_id = l.affiliate_id
group by a.affiliate_id;

デモで SQL Fiddle を参照してください

于 2013-06-08T14:40:55.057 に答える
0

ふたつのやり方:

Select l.affiliate_id ,
      count(distinct p.id) patientCount,
      count(distinct l.id) LeadCOunt
From patients p Join leads l
    On l.affiliate_id = p.Affiliate_id
Group By l.affiliate_id 

または、(アフィリエイトがどこかの独自のテーブルにあると仮定します)

Select Affiliate_id,
    (Select Count(*) From Patients
     Where Affiliate_id = a.Affiliate_id) patientCount,
    (Select Count(*) From Leads
     Where Affiliate_id = a.Affiliate_id) LeadCount
From affiliates a
于 2013-06-08T14:44:10.120 に答える