基于给定User表与Book表,如何编写SQL查询获取指定统计结果?
嗨,这个需求很清晰,咱们直接来搞定对应的SQL查询~
首先,核心目标是统计每个userid在Book表中的记录条数(也就是你要的bookCount),最直接的写法就是对Book表按userid分组,再统计每组的行数:
SELECT COUNT(*) AS bookCount, userid FROM Book GROUP BY userid ORDER BY bookCount DESC, userid ASC;
代码逻辑解释:
GROUP BY userid:把Book表的数据按用户ID划分成独立的组,每组对应一个用户的所有书籍记录COUNT(*):统计每个组内的记录总数,用AS bookCount给统计结果指定别名,和你要的输出字段名匹配ORDER BY:先按bookCount降序排列(让书籍数量多的用户排在前面),再按userid升序,完全匹配你给出的目标结果格式
如果你需要确保所有User表中的用户都被统计到(哪怕某个用户没有任何Book记录,也要显示bookCount为0),可以用左连接关联User表,这样逻辑更严谨:
SELECT COUNT(b.userid) AS bookCount, u.userid FROM User u LEFT JOIN Book b ON u.userid = b.userid GROUP BY u.userid ORDER BY bookCount DESC, u.userid ASC;
补充说明:
这里用COUNT(b.userid)而非COUNT(*),是因为左连接后,没有对应书籍记录的用户,b.userid会是NULL值,COUNT函数会自动忽略NULL,从而得到正确的0;如果用COUNT(*)会把NULL行也算入,得到错误的1。
内容的提问来源于stack exchange,提问作者thenewsboy
相关产品推荐
相关产品推荐

