MySQL按计数排序子查询

MySQL按计数排序子查询,mysql,sql,select,count,subquery,Mysql,Sql,Select,Count,Subquery,我有一个“Author”表,其中包含作者(昵称和ID) 在内容表中,每个项目都有一个字段“Author”,其中包含制作它的作者的ID 我想使用select查询选择所有作者,并按他们创建的内容量对他们进行排序 这就是我迄今为止所尝试的: SELECT id,Nickname FROM Authors WHERE 1 ORDER BY (SELECT COUNT(*) FROM Content WHERE Author=id) ASC 它运行,但输出无效-它没有特定的顺序 非常感谢您的帮助。这应

我有一个“Author”表,其中包含作者(昵称和ID)

在内容表中,每个项目都有一个字段“Author”,其中包含制作它的作者的ID

我想使用select查询选择所有作者,并按他们创建的内容量对他们进行排序

这就是我迄今为止所尝试的:

SELECT id,Nickname FROM Authors 
WHERE 1 ORDER BY (SELECT COUNT(*) FROM Content WHERE Author=id) ASC
它运行,但输出无效-它没有特定的顺序


非常感谢您的帮助。

这应该可以满足您的需要:

SELECT a.id, a.Nickname
FROM Authors a
WHERE 1
ORDER BY (SELECT COUNT(*) FROM Content c WHERE c.Author = a.id) ASC;
这使得关联变得明确。如果
Content
id
列,则您的版本将产生未排序的结果,这很可能是错误的

更常见的情况是,您需要在
选择中输入计数,然后执行以下操作:

SELECT a.id, a.Nickname, COUNT(c.Author) as num_content
FROM Authors a LEFT JOIN
     Content c
     ON c.Author = a.id
GROUP BY a.id, a.Nickname
ORDER BY num_content ASC;

这应该满足您的要求:

SELECT a.id, a.Nickname
FROM Authors a
WHERE 1
ORDER BY (SELECT COUNT(*) FROM Content c WHERE c.Author = a.id) ASC;
这使得关联变得明确。如果
Content
id
列,则您的版本将产生未排序的结果,这很可能是错误的

更常见的情况是,您需要在
选择中输入计数,然后执行以下操作:

SELECT a.id, a.Nickname, COUNT(c.Author) as num_content
FROM Authors a LEFT JOIN
     Content c
     ON c.Author = a.id
GROUP BY a.id, a.Nickname
ORDER BY num_content ASC;
您可以使用:

SELECT a.id,a.Nickname
FROM Authors  a
LEFT JOIN Content c
  ON c.Author=a.id
GROUP BY a.id,a.Nickname
ORDER BY COUNT(*) DESC
您可以使用:

SELECT a.id,a.Nickname
FROM Authors  a
LEFT JOIN Content c
  ON c.Author=a.id
GROUP BY a.id,a.Nickname
ORDER BY COUNT(*) DESC

我试过了,你的回答(第一个问题)很有魅力。而且,它非常合乎逻辑,解释得很好。非常感谢!我试过了,你的回答(第一个问题)很有魅力。而且,它非常合乎逻辑,解释得很好。非常感谢!