如何在SQLite中查询同一ID对应不同测试结果的数据?
找出同一ID对应不同TEST_RESULT的SQL正确写法
示例表(Table1)
| ID | TEST_RESULT | DIAGNOSIS |
|---|---|---|
| 2 | POSITIVE | X78 |
| 2 | NEGATIVE | U98 |
| 3 | POSITIVE | U98 |
| 4 | NFEGATIVE | Y55 |
期望结果
| ID | TEST_RESULT | DIAGNOSIS |
|---|---|---|
| 2 | POSITIVE | X78 |
| 2 | NEGATIVE | U98 |
错误代码分析
你提供的错误代码存在两个关键问题:
- 逻辑矛盾:
TEST_RESULT= NEGATIVE AND TEST_RESULT = POSITIVE不可能成立,单条记录的TEST_RESULT只能是一个值 - 语法错误:字符串类型的
NEGATIVE和POSITIVE未加单引号,SQL会将其识别为变量而非字符串常量
错误代码如下:
SELECT * FROM table1 WHERE ID <> ' ' AND TEST_RESULT= NEGATIVE AND TEST_RESULT = POSITIVE;
正确SQL写法
方法1:子查询筛选多结果ID
先通过分组找出拥有至少两种不同TEST_RESULT的ID,再查询这些ID对应的所有记录:
SELECT t.* FROM table1 t WHERE t.ID IN ( SELECT ID FROM table1 GROUP BY ID HAVING COUNT(DISTINCT TEST_RESULT) > 1 );
方法2:窗口函数(适用于MySQL 8.0+、PostgreSQL、SQL Server等)
利用窗口函数统计每个ID对应的不同TEST_RESULT数量,直接筛选数量大于1的行:
SELECT ID, TEST_RESULT, DIAGNOSIS FROM ( SELECT *, COUNT(DISTINCT TEST_RESULT) OVER (PARTITION BY ID) AS result_count FROM table1 ) t WHERE t.result_count > 1;
内容的提问来源于stack exchange,提问作者kora_num14
相关产品推荐
相关产品推荐

