如何筛选ID被作为父ID使用且满足最小次数要求的行
解决方案:按父ID使用次数筛选行
数据表结构
| Id | parent id |
|---|---|
| 1 | Null |
| 2 | Null |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
| 8 | 2 |
| 9 | 2 |
| 10 | 2 |
需求说明
设置参数Min parent id count,统计每个ID被作为父ID的使用次数,筛选出使用次数≥该参数的行:
- 当参数设为2时,返回ID为1(被使用3次)和2(被使用5次)的行
- 当参数设为4时,仅返回ID为2的行
SQL实现
以MySQL为例,通过以下代码实现:
-- 设定最小次数参数 SET @min_count = 2; -- 查询符合条件的行 SELECT t.* FROM your_table t INNER JOIN ( -- 统计每个父ID的使用次数并筛选达标项 SELECT `parent id` AS parent_id, COUNT(*) AS use_count FROM your_table WHERE `parent id` IS NOT NULL GROUP BY `parent id` HAVING use_count >= @min_count ) parent_stats ON t.Id = parent_stats.parent_id;
代码解释
- 参数设定:通过
SET @min_count = 2设置最小次数,可根据需求修改数值 - 子查询
parent_stats:- 过滤掉
parent id为空的行(空值不属于有效父ID) - 按
parent id分组,统计每个ID作为父ID的使用次数 - 用
HAVING筛选出使用次数≥参数的父ID
- 过滤掉
- 主查询:将原表与子查询结果关联,获取达标父ID对应的完整行
内容的提问来源于stack exchange,提问作者smjadeja
相关产品推荐
相关产品推荐

