1

こんにちは、以下の形式のテーブルが 2 つあります。

テーブル:

  ID   |  columnx | event |
  1    |     4    | call  |
  2    |     7    | call  |
  3    |     4    | call  |
  4    |     11   | visit |

B テーブル:

columnx  | fName |
  4      | clare |
  7      | Bill  |
  9      | Tom   |
  11     | Nick  |

次のようにクエリを作成しました。

Select A.columnx ,B.fName,Count(event) as Calls
from A
Left Join B on A.columnx = B.columnx 
where 'event' LIKE 'call';

次のような出力が得られました。

 columnx | fname  | Calls|
    4     | Clare  |   2  |
    7     | Bill   |   1  |
    11    | Nick   |   0  |

しかし、どうすれば以下の出力を得ることができますか:

 columnx  | fname  | Calls|
    4     | Clare  |   2  |
    7     | Bill   |   1  |
    11    | Nick   |   0  |
    9     | Tom    |   0  |

つまり、特定のレコードが結合されない場合でも、カウントが 0 のレコードを選択する必要があります。これは結合で実行できますか、それとも別の方法を見つける必要がありますか。助言がありますか。ありがとうございました。

4

2 に答える 2

0

サブクエリを使用してcount()、呼び出しを取得できます。

select dv.columnx,
  dv.fname,
  coalesce(dl.calls, 0) Calls
from device dv
left join
(
  select count(dl.event) Calls, dl.columnx
  from deal dl
  where dl.event LIKE 'call'
  group by dl.columnx
) dl
  on dv.columnx = dl.columnx

SQL FiddlewithDemoを参照してください。

WHEREまたは、これは、フィルターをJOIN:に移動することにより、サブクエリなしで実行できます。

select dv.columnx,
  dv.fname,
  coalesce(count(dl.event), 0) Calls
from device dv
left join deal dl
  on dv.columnx = dl.columnx
  and dl.event LIKE 'call'
group by dv.columnx,  dv.fname

SQL FiddlewithDemoを参照してください

これは次を返します:

| COLUMNX | FNAME | CALLS |
---------------------------
|       4 | clare |     2 |
|       7 |  Bill |     1 |
|       9 |   Tom |     0 |
|      11 |  Nick |     0 |
于 2013-02-14T17:43:16.893 に答える
0

'event' LIKE 'call' を left join の追加条件に移動

    Select B.columnx ,B.fName ,Count(A.'event') as Calls
    from A
    Right Join B on A.columnx   = B.columnx   and A.'event' LIKE 'call'
    group by B.columnx  ,B.fName 
    order by B.columnx   
于 2013-02-14T17:35:54.840 に答える