mysql - 第二个表的 SQL SELECT 和 COUNT

标签 mysql sql count group-by left-join

有 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/

相关文章:

php - MySQL结合了几个select语句

mysql - mysqldump 错误 : mysqldump: [ERROR] unknown variable 'database=someDb'

c++ - 在 QListWidget 中动态插入项目

sql - 我见过一个,但是……10 克包裹到底是什么?

python - 计算字典中特定/某些值的数量

Python:计算列范围内包含文本的行数

php - 选择行作为 wordpress post meta 的列

php - 从 mysli_fetch_array 获取选定值并输出

c# - 将 SQL NVARCHAR 的值返回到 C# 字符串

MySQL 计数行包括零(非常接近我想要的!)