代码之家  ›  专栏  ›  技术社区  ›  Mahmoud Abdelkader

按postgresql ltree的最大深度分组查询?

  •  0
  • Mahmoud Abdelkader  · 技术社区  · 14 年前

    我想查询所有名为“Shania Twain”的产品,但我只想按最深的树对它们进行分组 nlevel .

    假设我有一张像下面这样的表,上面有名字 categories

    +---------------+---------------+---------------+
    |id             |name           |tree           |
    +---------------+---------------+---------------+
    |1              |"Music"        |100            |
    +---------------+---------------+---------------+
    |2              |"Shania Twain" |100.1          |
    +---------------+---------------+---------------+
    |3              |"Artists"      |200            |
    +---------------+---------------+---------------+
    |5              |"Country"      |200.2          |
    +---------------+---------------+---------------+
    |6              |"Shania Twain" |200.2.4        |
    +---------------+---------------+---------------+
    

    例如,

    SELECT MAX(cat.id),
           cat.name,
           MAX(cat.tree)
      FROM
           public.categories cat
     WHERE
           cat.name = "Shania Twain"
    GROUP BY
           name
    HAVING
           MAX(nlevel(cat.tree))
    

    问题在于 HAVING 需要布尔表达式的子句。条款 MAX(nlevel(cat.tree)) 将返回一个整数。

    我该怎么做?

    提前谢谢

    艾哈迈迪

    1 回复  |  直到 14 年前
        1
  •  0
  •   Milen A. Radev    14 年前
    SELECT
        cat.id
        cat.name,
        cat.tree
    FROM
        public.categories AS cat
    WHERE
        cat.name = 'Shania Twain'
    AND
       NLEVEL(cat.tree) = (SELECT MAX(NLEVEL(tree) FROM public.categories WHERE cat.name='Shania Twain'))