【问题标题】:Order parent records by child record count按子记录计数排序父记录
【发布时间】:2017-07-24 16:14:47
【问题描述】:

我有一个表,它的外键指向同一个表的 id 列。

pages
=====
id      integer primary key autoincrement
name    text
parent  integer
FOREIGN KEY(parent) REFERENCES pages(id)

当我进行选择查询时,是否可以按子记录数对结果进行排序?

【问题讨论】:

  • 您是要按直系子代数排序,还是按层级数(子代、孙代等)排序?
  • @Mureinik 的问题强调了为什么样本数据和期望的结果如此有用。
  • 按一级孩子订购

标签: sql sqlite sorting count


【解决方案1】:

您可以将其与子记录的聚合查询结合起来并根据该查询进行排序:

SELECT   p.*
FROM     pages p
JOIN     (SELECT   parent, COUNT(*) AS cnt
          FROM     pages
          GROUP BY parent) c ON p.id = c.parent
ORDER BY c.cnt

【讨论】:

    【解决方案2】:

    您可以使用相关的子查询计算子查询的数量并根据它进行排序:

    SELECT id, name
    FROM pages
    ORDER BY (SELECT count(*)
              FROM pages AS p2
              WHERE p2.parent = pages.id);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多