列出每位创作者的曲目数,包含 0 首,按 id 排序。
| id | name |
|---|---|
| 1 | Aster |
| 2 | Lumen |
| 3 | Moss |
| id | artist_id | title |
|---|---|---|
| 101 | 1 | Blue |
| 102 | 1 | Gold |
| 103 | 2 | Echo |
候选 SQL
实际结果
尚未运行运行查询,看看哪些行不同。
参考 SQL
SELECT a.name, COUNT(t.id) AS tracks
FROM artists AS a
LEFT JOIN tracks AS t ON t.artist_id = a.id
GROUP BY a.id, a.name
ORDER BY a.id
预期结果
3 行| 比较状态 | name | tracks |
|---|---|---|
| Aster | 2 | |
| Lumen | 1 | |
| Moss | 0 |
当前查询的 SQLite 执行计划
对应实际执行的 SELECT 包装与 LIMIT 101,仅观察访问路径,不证明结果正确或速度更快。SQLite 计划说明 ↗
为什么会不同?
LEFT JOIN 为 Moss 留下一行,t.id 是 NULL。COUNT(*) 数行;COUNT(t.id) 只数非空值。 SQLite 文档 ↗
