0

ゴルフの試合を考えて、プレーヤーがハンディキャップカット (handicap_adjustment = -1) を受けた回数を数えたいと思いますが、まったくカットされていないプレーヤーも含めたいと思います。

PLAYER TABLE ...
PID Name
--- ----
1   Alan
2   Bob
3   Frank
4   Harry
5   Tom

CARD TABLE ...
PID HANDICAP_ADJUSTMENT
--- -------------------
1   -1
1   -1
2   0.2
2   0.2
2   0.2
2   0.2
3   0.2
3   0.2
4   -1
4   -1
4   -1
5   -1

RESULT I WANT IS ....
PID COUNT
--- -----
Alan   2
Bob    0
Frank  0
Harry  3
Tom    1

クエリのアイデアはありますか?

カード テーブルで handicap_adjustment = -1 を使用して pid のカウントを取得できますが、それをプレーヤー クエリに返す方法がわかりません:(

4

2 に答える 2

0

式とともに使用COUNTしてCASE、合計を取得できます。には、 :CASEを持つ行のみが含まれます。HANDICAP_ADJUSTMENT = -1

select p.name,
  count(case when HANDICAP_ADJUSTMENT = -1 then c.pid end) Total
from player p
left join card c
  on p.pid = c.pid
group by p.name

SQL FiddlewithDemoを参照してください

または、と一緒に使用SUM()してCASE合計を取得できます。

select p.name,
  sum(case when HANDICAP_ADJUSTMENT = -1 then 1 else 0 end) Total
from player p
left join card c
  on p.pid = c.pid
group by p.name

SQL FiddlewithDemoを参照してください

どちらも結果を出します。

|  NAME | TOTAL |
-----------------
|  Alan |     2 |
|   Bob |     0 |
| Frank |     0 |
| Harry |     3 |
|   Tom |     1 |
于 2013-01-20T22:54:09.290 に答える
0
SELECT p.name,a.count FROM players p
LEFT JOIN (SELECT pid,COUNT(*) AS count FROM handicap_adjustment GROUP BY pid WHERE handicap_adjustment = -1 ) a ON a.pid = p.pid
于 2013-01-20T22:43:40.870 に答える