使用子查询而不是联接解决SQL问题
我已经使用内部联接解决了下面的问题,但是,它只返回1行,并且不考虑有多个部署位置具有并列的最高乘坐次数的情况。我认为这需要使用子查询来解决 问:在过去的一周里,哪个部署地点的乘车次数最多 游乐设施表:使用子查询而不是联接解决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
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;
用您正在使用的数据库标记您的问题。