有 2 个表:
users
==========
id
name
notes
=========
id
user_id
note
用户可以有多个笔记。
我想做一个 SQL 查询来获取所有用户的所有字段以及注释的数量。此外,我希望结果按笔记数量排序 (desc)
我写了这个,但我想知道它是否是解决这个问题的正确/最快的方法:
SELECT u.*, count(n.id) as amountnotes FROM users AS u
LEFT JOIN notes AS n ON u.id=n.user_id
GROUP BY u.id
ORDER BY amountnotes DESC
EXPLAIN
给了我 2 个结果。用户上的“使用临时;使用文件排序”和注释上的“使用位置;使用连接缓冲区( block 嵌套循环)”
感谢任何帮助,谢谢。如果建议采用不同的方法,请解释原因,以便我理解。
最佳答案
如果 COUNT
是你想要的,你可以用子查询而不是连接来完成,就像这样:
SELECT u.*
, (SELECT COUNT(*) FROM notes WHERE notes.user_id=u.id) as amountnotes
FROM users u
ORDER BY amountnotes DESC
如果您以JOIN
方式执行此操作,您的GROUP BY
应该 列出用户
的所有列(尽管 MySql 是 RDBMS 系统之一,不需要这样做,但将此类 SQL 移植到其他供应商的数据库中会出现问题。
关于mysql - 第二个表的 SQL SELECT 和 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23633163/