0

Oracle DB を使用しています。

私は1つのテーブルを持っています:車。

3つのフィールドがあります

レース - 車 - フィニッシュ

Car は基本的に ID フィールドです。レースはレースの名前です。フィニッシュは車が配置された場所です: (1 位、2 位、4 位、DNF)。

0 回のインスタンスを含め、特定の車が各位置で何回フィニッシュしたかを返したいと考えています。したがって、最終結果は次のようになります。

Toyota
Finish         Amount
1st            3
2nd            0
3rd            2
DNF            0

車が 2 位に終わっていない場合に、NVL がゼロを返すようにしました。ただし、これはまだ 1 位と 3 位の終了カウントのみを返します。

私はほとんど SQL の初心者なので、このサイトや他の場所で見つけることができるゼロ カウントの質問をすべて読んでいますが、特定の状況に対するアドバイスを一般化することはできません。

表を含めるように編集: 明確にするために表を含めています。「レース」フィールドは、「フィニッシュ」ポジションをカウントしようとしているだけなので、このタスクでは実際には重要ではありません。

CAR       RACE      FINISH
Toyota    DCA       1st
Toyota    NYC       3rd
Toyota    ATL       3rd
Toyota    PHI       1st
4

2 に答える 2

0
select
  f.Finish,
  count(c.Finish) as Finish_Amount
from 
  (select '1st' as Finish from dual
   union all
   select '2nd' from dual
   union all
   select '3rd' from dual
   union all
   select 'DNF' from dual
  ) f
  left join Cars c 
    on f.Finish = c.finish
    and c.Car = 'Toyota'
    --and c.Race = 'Atlanta'
group by f.Finish
order by 1
于 2013-03-10T16:17:48.447 に答える
0

これはすべての車で機能します

select a.f,nvl(cnt,0) cnt
(select '1st' as f from dual
union
select '2nd' as f from dual
union
select '3rd' as f from dual
union
select 'DNF' as f from dual) a,
(select Finish,count(finish) as cnt from cars group by finish) b
where a.f=b.finish(+)

特定の車のみが必要な場合は、車の名前を指定する where 条件を含めるだけです

(select Finish,count(finish) as cnt from cars where car='MARUTI' group by finish)
于 2013-03-10T17:05:30.727 に答える