如何关联两个SQL查询并为每个feature root添加首个feature name列
解决方法
有两种实用的方法可以实现你的需求,既保留分组统计的结构,又新增每个feature_root对应的首个feature_name:
方法一:先筛选首个名称再关联统计结果
先通过窗口函数给每个feature_root下的记录编号,筛选出每组的第一条记录,再和你的分组统计查询关联:
WITH first_feature AS ( SELECT feature_root, feature_name, -- 按feature_name排序,给每个feature_root下的记录编序号,你可以换成其他排序字段(比如create_time)来定义"首个" ROW_NUMBER() OVER (PARTITION BY feature_root ORDER BY feature_name) AS rn FROM feature ) SELECT stat.feature_root, stat.count, first_feature.feature_name AS first_feature_name FROM ( -- 你的原分组统计查询 SELECT feature_root, COUNT(*) AS count FROM feature GROUP BY feature_root ) stat JOIN first_feature ON stat.feature_root = first_feature.feature_root WHERE first_feature.rn = 1;
方法二:用窗口函数直接生成结果
这种方式更简洁,直接在原表上通过窗口函数计算统计数和首个名称,最后用DISTINCT去重得到分组结果:
SELECT DISTINCT feature_root, -- 计算每个feature_root的总数 COUNT(*) OVER (PARTITION BY feature_root) AS count, -- 获取每个feature_root的首个feature_name,同样可以修改ORDER BY字段定义"首个" FIRST_VALUE(feature_name) OVER (PARTITION BY feature_root ORDER BY feature_name) AS first_feature_name FROM feature;
注意点
- 这里的"首个"是按
feature_name排序后的第一条,如果需要按插入顺序或其他逻辑定义,把ORDER BY后面的字段换成对应的字段(比如表中如果有create_time字段,就写ORDER BY create_time)。
内容的提问来源于stack exchange,提问作者lynee
相关产品推荐
相关产品推荐

