如何编写SQL查询筛选c3=100时c2值大于c3=101时c2值的id
需求说明
筛选出符合以下规则的id:同一id分组下,c3字段值为100时对应的c2字段取值,大于c3字段值为101时对应的c2字段取值。本次查询预期返回结果为841213874。
SQL实现方案
方案1:自连接实现(逻辑直观,易理解)
将表分别和自身关联,匹配同id下c3为100和101的两条记录,再做值比较:
SELECT DISTINCT t1.id FROM 你的表名 t1 INNER JOIN 你的表名 t2 ON t1.id = t2.id AND t1.c3 = 100 AND t2.c3 = 101 WHERE t1.c2 > t2.c2;
方案2:聚合函数实现(代码更简洁)
先过滤出c3为100、101的记录,按id分组后通过条件聚合做值比较:
SELECT id FROM 你的表名 WHERE c3 IN (100, 101) GROUP BY id HAVING MAX(CASE WHEN c3 = 100 THEN c2 END) > MAX(CASE WHEN c3 = 101 THEN c2 END);
注意:执行前请将SQL中的
你的表名替换为实际业务中的表名即可。
内容的提问来源于stack exchange,提问作者ush rani
相关产品推荐
相关产品推荐

