Contents
내가 작성한 쿼리
코로나19에서 회복된 환자, 양성 판정을 받았지만 나중에
음성 판정을 받은 환자를 찾기 위한 솔루션을 작성하세요.
* 환자가 한 번 이상의 양성 판정을 받은 후 나중에 한 번 이상의
음성 판정을 받은 경우 회복된 것으로 간주됩니다
* 첫 번째 양성 테스트와 양성 테스트 후 첫 번째 음성 테스트의 차이로 회복 시간(일)을 계산합니다
* 양성 및 음성 검사 결과를 모두 받은 환자만 포함하십시오
결과 테이블을 회복_시간 순서대로 오름차순으로, 환자_이름 순서대로 반환합니다.
내가 작성한 쿼리
Oracle
SELECT
p.patient_id,
p.patient_name,
p.age,
-- 최초 음성 날짜 - 최초 양성 날짜 → 회복 기간 계산
MIN(ct2.test_date) - MIN(ct1.test_date) AS recovery_time
FROM patients p
JOIN covid_tests ct1
ON p.patient_id = ct1.patient_id -- 양성 검사와 환자 테이블을 환자 ID 기준으로 조인
AND ct1.result = 'Positive' -- 양성 검사만 필터링
JOIN covid_tests ct2
ON p.patient_id = ct2.patient_id -- 음성 검사와 환자 테이블을 환자 ID 기준으로 조인
AND ct2.result = 'Negative' -- 음성 검사만 필터링
AND ct2.test_date > ct1.test_date -- 양성 검사보다 이후에 시행된 음성 검사만 포함
GROUP BY
p.patient_id,
p.patient_name,
p.age
ORDER BY
recovery_time ASC,
p.patient_name ASC;
MySQL
SELECT
p.patient_id,
p.patient_name,
p.age,
-- 최초 음성 날짜 - 최초 양성 날짜 → 회복 기간 계산
DATEDIFF(MIN(ct2.test_date), MIN(ct1.test_date)) AS recovery_time
FROM patients p
JOIN covid_tests ct1
ON p.patient_id = ct1.patient_id -- 양성 검사와 환자 테이블을 환자 ID 기준으로 조인
AND ct1.result = 'Positive' -- 양성 검사만 필터링
JOIN covid_tests ct2
ON p.patient_id = ct2.patient_id -- 음성 검사와 환자 테이블을 환자 ID 기준으로 조인
AND ct2.result = 'Negative' -- 음성 검사만 필터링
AND ct2.test_date > ct1.test_date -- 양성 검사보다 이후에 시행된 음성 검사만 포함
GROUP BY
p.patient_id,
p.patient_name
ORDER BY
recovery_time ASC,
p.patient_name ASC;
차이점
- 날짜 계산 방식의 차이
- 그룹화 조건 차
Share article