4

次の形式のデータがあります

userid  amount  term  APR
1        10       5    1
1        10       4    2
2        20       6    1
2        20       4    3
2        20       3    1

金額、期間、APRで注文したいので、出力では最大金額が必要で、対応する期間、APRです。金額が同じ場合は、最大期間のあるものを選択してください。期間が同じ場合も同様です。しかし、これら 3 つの組み合わせは常にユニークです。

出力列:

userid,  amount, term, apr, numberOfRowsForEachUser
  1       10       5   1      2
  2       20       6   1      3

質問: 最初の 4 つの列を取得できますが、「オファーの総数」または「ユーザーごとの行の総数」を取得する方法がわかりません。

私のクエリは次のようになります。

select 
  userid,amount,term,apr
  from 
( select userid, amount, term,  apr
   RANK() OVER (PARTITION BY userid ORDER BY amount,term,apr) amount_rank,   
from 
   tableXYZ
) 
where amount_rank = 1 
4

2 に答える 2

5

COUNT(*)分析関数を追加するだけ

select 
  userid,amount,term,apr, cnt
  from 
( select userid, amount, term,  apr
   RANK() OVER (PARTITION BY userid ORDER BY amount,term,apr) amount_rank,   
   COUNT(*) OVER (PARTITION BY userid) cnt
from 
   tableXYZ
) 
where amount_rank = 1 
于 2012-08-03T19:53:48.350 に答える
2

Justing answer (+1) が気に入りましたが、より直感的な別の回答を提供したいと考えていました。

select x.userid,x.amount,x.term,x.apr,y.cnt
from tableXYZ x, (select userid, COUNT(1) cnt from tableXYZ group by userid) y
where x.term = (select max(term) from tableXYZ xx where xx.userid = x.userid)
and x.userid = y.userid

こちらで遊べます

于 2012-08-03T20:12:26.957 に答える