在文章为什么是 Arel?,作者提出问题:
假设我们有一个 users 表和一个 photos 表,我们想要选择所有用户数据和他们创建的照片的 *count*。
他提出的解决方案(添加了换行符)是
SELECT users.*, photos_aggregation.cnt
FROM users
LEFT OUTER JOIN (SELECT user_id, count(*) as cnt FROM photos GROUP BY user_id)
AS photos_aggregation
ON photos_aggregation.user_id = users.id
当我尝试编写这样的查询时,我想出了
select users.*, if(count(photos.id) = 0, null, count(photos.id)) as cnt
from users
left join photos on photos.user_id = users.id
group by users.id
(if()
列列表中的只是为了让它在用户没有照片时表现相同。)
文章的作者接着说
只有高级 SQL 程序员知道如何写这个(我在工作面试中经常问这个问题,我从未见过有人做对)。而且应该不难!
我不认为自己是“高级 SQL 程序员”,所以我认为我遗漏了一些微妙的东西。我错过了什么?