为什么带子查询的SQL查询不起作用?
我有两个SQL表:cars和lap_times为什么带子查询的SQL查询不起作用?,sql,Sql,我有两个SQL表:cars和lap_times cars: - car_id - engine_size - car_type lap_times - lap_time_id - time - car_id 我想得到以下信息: -每种车型的车辆数量 -每种车型的平均发动机尺寸 -每种车型中所有车型中最快的一圈 我有这个: SELECT COUNT(cars.car_id), AVG(cars.engine_size), lps.FASTEST_LAP FRO
cars:
- car_id
- engine_size
- car_type
lap_times
- lap_time_id
- time
- car_id
我想得到以下信息:
-每种车型的车辆数量
-每种车型的平均发动机尺寸
-每种车型中所有车型中最快的一圈
我有这个:
SELECT
COUNT(cars.car_id),
AVG(cars.engine_size),
lps.FASTEST_LAP
FROM
cars,
(SELECT lap_times.car_id AS C_ID, MIN(lap_times.time) AS FASTEST_LAP FROM lap_times) as lps
WHERE
cars.car_id = lps.C_ID
GROUP BY
cars.car_type
但我什么也没得到。不过,我没有发现任何错误。你知道怎么了吗 问题在于您的子查询,您希望子查询返回最快的车号并返回一些车号 我建议你去了解一下 此外,如果您的子查询按您的要求运行,则只会选择一辆车,而不会按车类型选择一辆车 这是家庭作业吗?你应该给它贴上标签。试试这个:
SELECT a.Car_Type,
COUNT(a.car_ID) as NoOfCars,
AVG(a.engine_size) as AverageEngine,
MIN(b.time) as Fastest
FROM cars a INNER JOIN lap_times b ON
a.Car_ID = b.Car_ID
GROUP BY a.car_id
请尝试以下操作:
SELECT cars.car_type,
COUNT(cars.car_id),
AVG(cars.engine_size),
MIN(lps.FASTEST_LAP)
FROM cars,
lap_times
WHERE cars.car_id = lps.C_ID
GROUP BY cars.car_type
没关系。通过在子查询内分组修复了此问题
SELECT
COUNT(cars.car_id),
AVG(cars.engine_size),
lps.FASTEST_LAP
FROM
cars,
(SELECT lap_times.car_id AS C_ID, MIN(lap_times.time) AS FASTEST_LAP FROM lap_times GROUP BY lap_times.car_id) as lps
WHERE
cars.car_id = lps.C_ID
GROUP BY
cars.car_type
顺便问一下,你不应该用MINtime来确定最快圈数吗?您的子查询中有MAX。根据答案,有更好的方法进行此查询,但是如果你需要创建一个动态的派生表,你可以使用CROSS和OUTER APPLY。所有的答案都是一样的,他们只是让AVG函数包含每辆车的发动机尺寸多次,因为每辆车都有很多圈数。我已经试过了,但没有成功,因为AVG函数最终包含了每辆车的发动机尺寸每圈跑几次。谢谢你。我解决了这个问题。只是必须在派生表中分组。在子查询中?你的意思是查询-我看不到第二个选择这里这是子查询。啊,好吧,这不是完整的sql-明白了-抱歉:这不是按汽车类型分组,这只是子查询
SELECT
COUNT(cars.car_id),
AVG(cars.engine_size),
lps.FASTEST_LAP
FROM
cars,
(SELECT lap_times.car_id AS C_ID, MIN(lap_times.time) AS FASTEST_LAP FROM lap_times GROUP BY lap_times.car_id) as lps
WHERE
cars.car_id = lps.C_ID
GROUP BY
cars.car_type