SQL查询:筛选存在count≥10的ID对应的所有数据行
解决方案:选中所有包含count≥10的id的全部行
需求很明确:只要某个id下有任意一行的count值≥10,就把这个id的所有记录都提取出来,而不是只挑count≥10的单行。下面提供几种可行的实现方式:
方法1:子查询筛选目标id
先找出所有符合条件的id(即存在count≥10的id),再关联原表取出对应所有行:
SELECT t.* FROM your_table t WHERE t.id IN ( SELECT DISTINCT id FROM your_table WHERE count >= 10 );
这里子查询用DISTINCT去重是为了避免重复id,不过即使不用,IN子句也会自动去重,加了效率会更高一点。
方法2:窗口函数标记分组最大值
用窗口函数给每个id分组计算最大count,再筛选出分组内最大值≥10的行:
SELECT id, year_month, count FROM ( SELECT *, MAX(count) OVER (PARTITION BY id) AS max_count FROM your_table ) t WHERE t.max_count >= 10;
内层查询给每条记录都加上了对应id分组的最大count值,外层只要筛选这个最大值≥10的行,就能得到该id的所有记录。
方法3:EXISTS子查询逐行校验
对每一行记录,检查同一个id下是否存在count≥10的记录,存在就保留当前行:
SELECT t.* FROM your_table t WHERE EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.id = t.id AND t2.count >= 10 );
这种方式逻辑直观,数据库优化器一般也会对EXISTS做很好的优化,性能表现不错。
内容的提问来源于stack exchange,提问作者drake10k
相关产品推荐
相关产品推荐

