使用子查询而不是联接解决SQL问题

使用子查询而不是联接解决SQL问题,sql,Sql,我已经使用内部联接解决了下面的问题,但是,它只返回1行,并且不考虑有多个部署位置具有并列的最高乘坐次数的情况。我认为这需要使用子查询来解决 问:在过去的一周里,哪个部署地点的乘车次数最多 游乐设施表: ride_id: int[primary key] bike_id: int ride_datetime:string duration: int bike_id [Primary Key] deploy_location: string SELECT deploy_location

我已经使用内部联接解决了下面的问题,但是,它只返回1行,并且不考虑有多个部署位置具有并列的最高乘坐次数的情况。我认为这需要使用子查询来解决

问:在过去的一周里,哪个部署地点的乘车次数最多

游乐设施表:

ride_id: int[primary key]

bike_id: int

ride_datetime:string

duration: int
bike_id [Primary Key]

deploy_location: string
SELECT deploy_location

 FROM deployed_bikes

 WHERE bike_id >= ALL  (SELECT COUNT(ride_id)

                      FROM rides

                      WHERE to_date(ride_date, 'YYYY-MON-DD') BETWEEN (current_date - 7) AND 
 (current_date - 1))
部署表:

ride_id: int[primary key]

bike_id: int

ride_datetime:string

duration: int
bike_id [Primary Key]

deploy_location: string
SELECT deploy_location

 FROM deployed_bikes

 WHERE bike_id >= ALL  (SELECT COUNT(ride_id)

                      FROM rides

                      WHERE to_date(ride_date, 'YYYY-MON-DD') BETWEEN (current_date - 7) AND 
 (current_date - 1))
回答:

ride_id: int[primary key]

bike_id: int

ride_datetime:string

duration: int
bike_id [Primary Key]

deploy_location: string
SELECT deploy_location

 FROM deployed_bikes

 WHERE bike_id >= ALL  (SELECT COUNT(ride_id)

                      FROM rides

                      WHERE to_date(ride_date, 'YYYY-MON-DD') BETWEEN (current_date - 7) AND 
 (current_date - 1))

你的答案看起来根本不正确。您正在将名为
bike\u id
的内容与计数进行比较

我真的不知道“最好”是什么意思。但我希望这更接近于回答这个问题:

SELECT d.deploy_location, COUNT(*)
FROM deployed_bikes db JOIN
     rides r
     ON r.bike_id = dl.bike_id
WHERE to_date(ride_date, 'YYYY-MON-DD') BETWEEN (current_date - 7) AND (current_date - 1))
GROUP BY d.deploy_location
ORDER BY COUNT(*) DESC
FETCH FIRST 1 ROW ONLY;  -- some databases might use LIMIT or something else
如果在平局时需要多行,我建议使用窗口功能:

SELECT d.*
FROM (SELECT d.deploy_location, COUNT(*) as cnt,
             RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum
      FROM deployed_bikes db JOIN
           rides r
           ON r.bike_id = dl.bike_id
      WHERE to_date(ride_date, 'YYYY-MON-DD') BETWEEN (current_date - 7) AND (current_date - 1))
      GROUP BY d.deploy_location
     ) d
WHERE seqnum = 1;

用您正在使用的数据库标记您的问题。