SQL查询优化
假设您有以下表格:SQL查询优化,sql,query-optimization,Sql,Query Optimization,假设您有以下表格: 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\u description.model。解决此问题的一种方法是编写以下查询 select r.race_num, MAX(score) as MaxScore,
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\u description.model。解决此问题的一种方法是编写以下查询
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
但在这里,我们在内部查询中对结果表进行排序,而不是选择最大元素,我认为这将非常耗时。是这样吗?我们如何优化这一点?谢谢。我不确定这是否有助于提高性能,但请尝试
SELECT r.race_num,
MAX(score) as MaxScore,
AVG(score) as AvgScore,
MAX(case when mr.max_score IS NOT NULL then c.carnum end) as TopCarNum,
MAX(case when mr.max_score IS NOT NULL then cd.model end) as TopCarModel
FROM Result LEFT OUTER JOIN
(SELECT r.race_num, MAX(score) max_score FROM Result r GROUP BY r.race_num) mr
ON Result.res_num = mr.res_num AND Result.score = mr.max_score
LEFT OUTER JOIN Car c
ON c.car_id = Result.car_id
LEFT OUTER JOIN Car_Description cd
ON c.car_id = d.car_id
GROUP BY r.race_num
HAVING COUNT(*) > 2
“我想这会很费时”然后测试它。没关系,你只会忘记内部选择中的group by。谢谢