邻接表模型是一种用于存储分层数据结构的方法,其中每个节点均指向其子节点。在使用公共表表达式(CTE)和GROUP BY以及WITH ROLLUP的情况下,可对特定条件进行分组。
示例代码如下所示:
WITH recursive cte AS ( SELECT id, name, parent_id, qty FROM my_table WHERE parent_id IS NULL UNION ALL SELECT c.id, c.name, c.parent_id, c.qty FROM my_table c JOIN cte p ON c.parent_id = p.id ) SELECT COALESCE(p.name, 'All') AS parent_name, c.name, SUM(qty) AS total_qty FROM cte c LEFT JOIN cte p ON c.parent_id = p.id GROUP BY p.name, c.name WITH ROLLUP HAVING (p.name IS NULL) OR (p.name IS NOT NULL AND total_qty > 100)
这个查询语句在邻接表中使用CTE递归地选取每个节点、节点的父节点、节点名称和其子节点的数量。接下来,使用LEFT JOIN将其与其父节点连接。最后,使用GROUP BY和WITH ROLLUP对结果进行分组并添加了一个HAVING子句来筛选总数大于100的行。