gpt4 book ai didi

sql - 递归 COUNT 查询 (SQL Server)

转载 作者:行者123 更新时间:2023-12-05 01:03:21 25 4
gpt4 key购买 nike

我有两个 MS SQL 表:类别、问题。每个问题都被分配到一个类别。一个类别可能有许多子类别。

类别

  • Id : bigint (PK)
  • 名称:nvarchar(255)
  • 接受问题:位
  • IdParent : bigint (FK)

问题

  • Id : bigint (PK)
  • 标题:nvarchar(255)...
  • IdCategory : bigint (FK)

如何递归计算给定类别的所有问题(包括子类别中的问题)。我已经根据几个教程尝试过,但仍然无法弄清楚:(

最佳答案

with /* recursive */ category_tree as (
select category.id as top_category_id, category.id as category_id
from category
union all
select top_category_id, category.id
from category_tree
join category on category.idparent = category_tree.category_id
)
select category_tree.top_category_id as category, count(*) as question_count
from category_tree
join question on question.idcategory = category_tree.category_id
group by category_tree.top_category_id

CTE 构建了一个列表,其中列出了每个类别下的子类别 - 本质上,它在树中递归并生成(顶级类别、后代类别)的平面 View 。

初始项(在 union all 之前)选择每个类别,并表明它包含自身 - 递归项然后包括到目前为止找到的类别的所有子类别,并在所有 category_id 列时自动停止(不产生结果)在之前的迭代中是叶子类别。

在此基础上,我们只需将这个扁平 View 重新连接到问题上,以生成一组(顶级类别、问题)行,并基于(顶级类别)进行聚合。

关于sql - 递归 COUNT 查询 (SQL Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2867545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com