SQL左连接查询问题:获取所有用户及骑行次数(含无骑行用户)
问题修正与解决方案
你的SQL语句存在两处关键错误,导致无法得到预期结果:
- 关联条件错误:
left join Rides B on (A.UserId = B.RideID)误将Rides表的RideId作为关联字段,实际应关联UserId,即A.UserId = B.UserId - GROUP BY字段错误:
group by A.idUser中的字段名idUser与Users表的实际字段UserId不匹配
另外,原语句用count(B.RideId)会把未骑行用户的次数统计为0,而你期望返回NULL,需要调整统计逻辑。
符合预期的修正SQL:
SELECT A.UserId, SUM(CASE WHEN B.RideId IS NOT NULL THEN 1 END) AS CountRides FROM Users A WITH(NOLOCK) LEFT JOIN Rides B ON A.UserId = B.UserId GROUP BY A.UserId
说明:
SUM(CASE WHEN B.RideId IS NOT NULL THEN 1 END):有骑行记录时每条计1,求和得到总次数;无骑行记录时CASE返回NULL,SUM结果即为NULL,匹配你想要的输出。- 已修正关联条件和GROUP BY的字段名,确保逻辑正确。
如果希望未骑行用户的次数显示为0而非NULL,可直接使用COUNT(B.RideId),修正后的语句为:
SELECT A.UserId, COUNT(B.RideId) AS CountRides FROM Users A WITH(NOLOCK) LEFT JOIN Rides B ON A.UserId = B.UserId GROUP BY A.UserId
内容的提问来源于stack exchange,提问作者ClaudiaM
相关产品推荐
相关产品推荐

