SQL查询 - 选择最佳汽车数量

时间:2012-09-05 14:36:55

标签: sql oracle

假设您有以下表格:

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

但我不明白 - 如何为每场比赛选择最佳赛车数量和型号?感谢。

1 个答案:

答案 0 :(得分:1)

我假设car_id是从汽车到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

关键在于,有条件地选择有关顶级车的信息。