아래 스키마 테이블이 있다고 가정 해 봅시다.
create table result
(
id int,
task_id int,
test_name string,
test_result string
);
이 테이블에 채워진 데이터 세트는 다음과 같습니다.
insert into result
values (1, 1, 'test_a', 'pass'),
(2, 1, 'test_b', 'fail'),
(3, 1, 'test_c', 'pass'),
(4, 1, 'test_d', 'pass'),
(5, 2, 'test_a', 'pass'),
(6, 2, 'test_b', 'pass'),
(7, 2, 'test_c', 'pass'),
(8, 2, 'test_d', 'pass');
기본적으로 단일 작업에는 여러 테스트 결과 항목이 있습니다. test_b가 실패했지만 다른 모든 테스트가 통과 된 task_id를 검색하고 싶습니다. 따라서이 예에서는 task_id : 1 만 반환해야합니다.
나는 EXISTS 및 HAVING으로 시도했지만이 경우에는 작동하지 않는 것 같습니다. 저는 SQL을 처음 사용합니다. 어떻게 구현할 수 있습니까?
having
절 과 함께 집계를 사용합니다 .
select task_id
from result
group by task_id
having sum(case when test_name = 'test_b' and test_result = 'fail' then 1 else 0 end) = 1 and
sum(case when test_result = 'pass' then 1 else 0 end) = count(*) - 1;
첫 번째 조건은 test_b가 실패했는지 확인합니다. 두 번째는 패스 수를 계산하며 작업 행 수보다 하나 적어야합니다.
데이터베이스가 except
(또는 minus
)을 지원 하는 경우 집합 기반 작업을 사용합니다.
select task_id
from result
where test_name = 'test_b' and test_result = 'fail'
except
select task_id
from result
where test_name <> 'test_b' and test_result = 'fail'
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다