【问题标题】:MySQL order by count subqueryMySQL 按计数子查询排序
【发布时间】:2019-02-20 03:39:20
【问题描述】:

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

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

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

这是我迄今为止尝试过的:

SELECT id,Nickname FROM Authors 
WHERE 1 ORDER BY (SELECT COUNT(*) FROM Content WHERE Author=id) ASC

它运行,但输出无效 - 它没有特定的顺序...

非常感谢任何帮助。

【问题讨论】:

    标签: mysql sql select count subquery


    【解决方案1】:

    你可以使用:

    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
    

    【讨论】:

      【解决方案2】:

      这应该做你想做的:

      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 中进行计数,您会这样做:

      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;
      

      【讨论】:

      • 我试过了,你的答案(第一个查询)就像一个魅力。此外,它非常合乎逻辑且解释清楚。非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2014-12-09
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      相关资源
      最近更新 更多