2

次のテーブルがあるとします。

TABLE Car
car_id
num

TABLE Car_description
dsc_id
car_id
model

TABLE Result
res_id
car_id
race_num
result

タスクは、2 台以上の車があるレースの最大平均スコアと、最高の車の Car.num, Car_description.model を選択することです。私は次のクエリを書きました

SELECT 
race_num,
MAX(result),
AVG(result),
STDDEV(result)
FROM Result r, Car c, Car_description d
WHERE c.car_id = r.car_id AND d.car_id = c.car_id
HAVING COUNT(result) > 2
GROUP BY r.race_num

しかし、私は理解していません - 各レースに最適な車の番号とモデルを選択する方法は? ありがとう。

4

1 に答える 1

1

car_id は、car から car_description への 1 対 1 のマッピングであると想定しています。

次のクエリは、row_number() を使用して、スコアに基づいて一番上の車を取得します。この情報は「結果」にすでに存在している可能性があります。

select r.race_num,
       MAX(score) as MaxScore,
       AVG(score) as AvgScore,
       MAX(case when seqnum = 1 then c.carnum end) as TopCarNum,
       MAX(case when seqnum = 1 then cd.model end) as TopCarModel
from (select r.*,
             ROW_NUMBER() over (partition by race_num order by score desc) as seqnum
      from Result r
     ) r left outer join
     Car c
     on c.car_id = r.car_id left outer join
     Car_Description cd
     on c.car_id = d.car_id
group by r.race_num
having COUNT(*) > 2

これの鍵となるのは、先頭の車に関する情報を条件付きで選択するグループ化です。

于 2012-09-05T14:44:49.723 に答える