내일배움캠프/사전캠프 퀘스트

[내일배움캠프]_사전캠 SQL 퀘스트 3일차

cork-7 2024. 12. 2. 22:43

30) doctors 테이블에서 전공(major)가 성형외과인 의사의 이름을 알아내는 쿼리를 작성해주세요!
select name
from doctors 
where major = '성형외과'


31) doctors 테이블에서 각 전공 별 의사 수를 계산하는 쿼리를 작성해주세요!
select major,
       count(1) count_of_major
from doctors 
group by 1



32) doctors 테이블에서 현재 날짜 기준으로 5년 이상 근무(hire_date)한 의사 수를 계산하는 쿼리를 작성해주세요!
select count(1) as 5_years_or_more 
from doctors 
where datediff(curdate(), hire_date) >= 5 * 365



33) doctors 테이블에서 각 의사의 근무 기간을 계산하는 쿼리를 작성해주세요!
select name,
       datediff(curdate(), hire_date) working_period
from doctors 



34) patients 테이블에서 각 성별(gender)에 따른 환자 수를 계산하는 쿼리를 작성해주세요!
select gender,
       count(gender)
from patients 
group by gender



35) patients 테이블에서 현재 나이가 40세 이상인 환자들의 수를 계산하는 쿼리를 작성해주세요!
select *
from patients 
where year(curdate())-year(birth_date) -
       case when month(curdate()) < month(birth_date) or
                 (month(curdate()) = month(birth_date) and day(curdate()) < day(birth_date))
            then 1 
            else 0 end >=40

-- 이건 40세 이상인 사람을 출력하는건데... 적은것도 드럽게 복잡하게 작성했네

답 1 나옴


36) patients 테이블에서 마지막 방문 날짜(last_visit_date)가 1년 이상 된 환자들을 선택하는 쿼리를 작성해주세요!
SELECT *
FROM patients
WHERE last_visit_date <= DATE_SUB(CURDATE(), interval 1 year)  
- DATE_SUB =  날짜, 시간 빼기
- CURDATE = 현재 날짜 출력
- INTERVAL = 기간


37) patients 테이블에서 생년월일이 1980년대인 환자들의 수를 계산하는 쿼리를 작성해주세요!
SELECT COUNT(BIRTH_DATE) 1980_birth
FROM patients
WHERE SUBSTR(BIRTH_DATE,1,4) between 1980 and 1989 
- birth-date 필드가 날짜형식으로 되있다면 year을 사용해도됨

WHERE YEAR(BIRTH_DATE) BETWEEN 1980 AND 1989