MySQL按计数排序子查询
我有一个“Author”表,其中包含作者(昵称和ID) 在内容表中,每个项目都有一个字段“Author”,其中包含制作它的作者的ID 我想使用select查询选择所有作者,并按他们创建的内容量对他们进行排序 这就是我迄今为止所尝试的: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 它运行,但输出无效-它没有特定的顺序 非常感谢您的帮助。这应
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
我试过了,你的回答(第一个问题)很有魅力。而且,它非常合乎逻辑,解释得很好。非常感谢!我试过了,你的回答(第一个问题)很有魅力。而且,它非常合乎逻辑,解释得很好。非常感谢!