Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么带子查询的SQL查询不起作用?_Sql - Fatal编程技术网

为什么带子查询的SQL查询不起作用?

为什么带子查询的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

我有两个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 
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