【发布时间】:2020-05-14 00:41:57
【问题描述】:
假设我有一个 movies 表和一个带有 movies_id 外键的演员表
SELECT movies.id, movies.title
JOIN actors
ON movies.id = actors.movie_id
GROUP BY movies.id
ORDER BY COUNT(movies.id) DESC
这将正确地给我按演员数量排序的电影。
但我认为前 4 行应该生成一个类似的表格
id title
2. Titanic
3. Fight club
1. Casablanca
每个电影id应该只出现一次,怎么ORDER BY按个数排序呢?除非 SQL 在执行前 4 行时做了一些底层魔法来秘密计算 COUNT(movies.id)
【问题讨论】:
-
您的意思是order of execution of SQL,SQL 将逐步执行:JOIN,然后是 GROUP BY,然后是 SELECT,那么它如何在不知道 COUNT(*) 的情况下进行 ORDER BY? IMO 它将首先
parse查询,然后它会知道它应该在 GROUP BY/SELECT 步骤中计算 COUNT(*),以便在 ORDER BY 步骤中它将有信息进行排序。要知道,SQL 并不是一个未知的魔法实体,它只是一个由,嗯,一些书呆子写的程序。
标签: sql