查询指定ID分区中TC_No对应的Result不一致的冲突记录
问题描述
现有测试数据如下:
| ID | TC_No | Result |
|---|---|---|
| 1 | tc_1 | PASS |
| 1 | tc_2 | PASS |
| 1 | tc_3 | FAIL |
| 1 | tc_4 | PASS |
| 1 | tc_5 | FAIL |
| 2 | tc_1 | FAIL |
| 2 | tc_2 | PASS |
| 2 | tc_3 | FAIL |
| 2 | tc_4 | FAIL |
| 2 | tc_5 | FAIL |
需要筛选出ID IN (1,2)的记录中,同一TC_No对应不同ID的Result存在冲突的所有记录,预期输出如下:
| ID | TC_No | Result |
|---|---|---|
| 1 | tc_1 | PASS |
| 1 | tc_4 | PASS |
| 2 | tc_1 | FAIL |
| 2 | tc_4 | FAIL |
用户尝试的查询语句:
SELECT * From (SELECT * from Excel As T1 UNION SELECT * from Excel As T2) As c where ID in(1,2) order By TC_NO
修正后的查询语句
方法1:使用窗口函数快速定位冲突用例
WITH tc_conflict_check AS ( SELECT ID, TC_No, Result, -- 统计当前TC_No下不同Result的数量 COUNT(DISTINCT Result) OVER (PARTITION BY TC_No) AS result_type_count FROM Excel WHERE ID IN (1, 2) ) SELECT ID, TC_No, Result FROM tc_conflict_check WHERE result_type_count > 1 ORDER BY TC_No, ID;
方法2:自关联匹配冲突记录
SELECT DISTINCT t1.* FROM Excel t1 JOIN Excel t2 ON t1.TC_No = t2.TC_No AND t1.ID != t2.ID AND t1.Result != t2.Result WHERE t1.ID IN (1, 2) AND t2.ID IN (1, 2) ORDER BY t1.TC_No, t1.ID;
逻辑说明
- 窗口函数方法:先筛选ID为1、2的记录,再按
TC_No分组统计每个测试用例的Result取值种类数,只要种类数大于1,就说明该用例存在Result冲突,直接取出这些记录。 - 自关联方法:将表与自身关联,匹配同一TC_No、不同ID且Result不同的记录,通过
DISTINCT避免重复输出,最终得到冲突的所有记录。
内容的提问来源于stack exchange,提问作者Soubhagya Laxmi
相关产品推荐
相关产品推荐

