0

私はこれらのテーブルを持っています:

人(pid、name、email、phone、city)

ride(rid、pid、date、spots、start、target)[rideID、personID-ライドを提供する人、spots =ライドの空きスロット、スタートとターゲットが目的地です]

参加(pid、rid)-人pidはライドライドに参加します

関数generousUsers(k)を満たす必要があります

寛大さのランキングは、その人が提供する乗り物の数によって定義されます。この定義でK番目の寛大なユーザーを見つける必要があります(複数存在する場合があります)。リストに含まれる人がK人未満の場合は、NULLを返す必要があります。

私はVIEWを使用することを考えていましたが、クエリの再帰的な性質により、私は無知になります。

4

1 に答える 1

1

編集:PostgreSQLを使用しているため、ROWNUMに相当するものはrow_number()になり、次のように使用されます:

Select pid From 
    (Select pid, count(*) as ranking, row_number() OVER (Order By ranking Desc) as Rownum 
    From Ride 
    Group By pid
    Order By ranking desc)
    Where Rownum < K

最初の答え

pid のみが必要な場合は、これを試すことができます。

Select pid From 
(Select pid, count(*) as ranking 
From Ride 
Group By pid
Order By ranking desc)
Where Rownum < K

このようにして、ランキングに基づいて K 個の最初の pid を取得します。Kより少ない場合でも、それらを取得できます。ただし、開発している環境によっては、単純なカウントを使用してそれを確認できます。

何かのようなもの

Select Count(*) 
From (Select Distinct pid 
    From Ride)

乗車を提供した個別の pid の数を取得します。この数値が >= K であることを確認すると、設定は完了です。

重要: RowNum 関数はすべてのタイプの RDBMS で機能するわけではありません (Oracle 用です)。

于 2012-12-05T11:50:30.070 に答える