2
我具备这些表的数据库:如何有SQL查询2级的子查询分为
- 用户(ID,电子邮件)
- 旅行(ID,driver_id)
- MatchedTrips(ID,trip_id )
我需要为每个用户获得他创建的旅行总数除以找到的总匹配数。
我一直在为此构建原始SQL查询。这是我试过的,并且确定它远没有正确。
SELECT
users.email,
total_trips.count1/total_matches.count2
FROM users CROSS JOIN (SELECT
users.email,
count(trips.driver_id) AS count1
FROM trips
INNER JOIN users ON trips.driver_id = users.id
GROUP BY users.email) total_trips
CROSS JOIN (SELECT users.email, count(matches.trip_id) AS count2
FROM matches
LEFT JOIN trips ON matches.trip_id = trips.id
LEFT JOIN users ON trips.driver_id = users.id
GROUP BY users.email) total_matches;
我认为这个查询需要处理除零的情况,并且是的电子邮件是唯一的。感谢Gordon的帮助。 –
@IslamWazery。 。 。您的原始查询不处理这种情况。但很容易:'(count(distinct t.id)/ nullif(count(distinct m.id),0))'。 –
谢谢你,我接受你的答案,因为它真的是我需要的。 –