코딩 테스트/SQL 77

12세 이하인 여자 환자 목록 출력하기

[문제] PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요. [단계별 풀이] 1. 테이블에서 AGE가 12 이하이면서 GEND_CD가 'W'인 행을 필터링한다2. 환자이름, 환자번호, 성별코드, 나이, 전화번호를 선택하는데 IFNULL 함수를 사용해서 전화번호가 NULL이면 'NONE'으로 대체한다3. 나이를 내림차순 정렬, 환자이름으로 오름차순 정렬한다[정답]SELECT PT_NAME, PT_NO, GEND_CD, AGE, ..

진료과별 총 예약 횟수 출력하기

[문제] APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요. 이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요. [단계별 풀이] 1. 테이블에서 APNT_YMD가 2022년 5월인 행을 필터링 한다2. 진료과코드를 GROUP BY 해준다3. COUNT 함수로 PT_NO의 행을 센다 (AS 5월예약건수)4. 5월예약건수, 진료과 코드를 정렬한다SELECT MCDP_CD AS 진료과코드, COUNT(PT_NO) AS 5월예약건수FROM APPOINTMENTWHERE APNT_YMD LIK..

입양 시각 구하기

[문제] 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다. [단계별 풀이] 1. HOUR 함수로 DATETIME 컬럼에서 시간만 추출한 뒤 HOUR 별칭으로 선택한다2. 테이블에서 HOUR가 9 ~ 19 사이인 행만 필터링한다3. HOUR를 GROUP BY 해준다4. COUNT 함수로 ANIMAL_ID의 행 수를 세어준다5. HOUR 순으로 정렬한다[정답]SELECT HOUR(DATETIME) AS HOUR, # HOUR는 숫자값을 반환한다 COUNT(ANIMAL_ID) AS COUNTFROM ANIMAL_OUTSWHERE..

고양이와 개는 몇 마리 있을까

[문제] 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요. [단계별 풀이] 1. ANIMAL_TYPE 컬럼을 살펴보면 개와 고양이 뿐이므로 해당 컬럼을 GROUP BY 해준다2. COUNT 함수를 사용해서 ANIMAL_ID컬럼의 행의 수를 센다3. ANIMAL_TYPE 순으로 정렬한다[정답]SELECT ANIMAL_TYPE, COUNT(ANIMAL_ID) AS countFROM ANIMAL_INSGROUP BY ANIMAL_TYPEORDER BY ANIMAL_TYPE

카테고리 별 상품 개수 구하기테고리 별 상품 개수 구하기

[문제] PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요. [단계별 풀이] 1. 카테고리 컬럼을 SUBSTR() 함수를 이용해서 앞의 2자리만 가져온다2. 해당 컬럼을 기준으로 그룹화를 진행한다3. COUNT() 함수로 RPODUCT_ID의 행의 수를 센다4. 카테고리 코드를 기준으로 정렬한다[정답]SELECT SUBSTR(PRODUCT_CODE, 1, 2) AS CATEGORY, COUNT(PRODUCT_ID) AS PRODUCTSFROM PRODUCT GROUP BY CATEGORY # MYSQL에서는 GROUP BY에서 별칭 사용이 가능하다ORDER..

중성화 여부 파악하기

[문제] 보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요. [단계별 풀이]1. 아이디와 이름을 선택한다2. SEX_UPON_INTAKE 컬럼이 'Neutered' 이거나 'Spayed' 인 행은 해당 컬럼의 값을 'Y' 로  아니면 'N'으로 변경하고 별칭을 중성화로 한 뒤 선택한다3. 아이디 순으로 정렬한다[정답]SELECT ANIMAL_ID, NAME, CASE WHEN SEX_UPON_INTAKE LIKE..

조건에 맞는 회원수 구하기

[문제] USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요. [단계별 풀이] 1. 테이블에서 2021년에 가입한 회원이면서 나이가 20세 이상 29세 이하인 회원을 필터링한다2. USER_ID를 COUNT() 함수로 행의 수를 세어준다[정답]SELECT COUNT(USER_ID) AS USERSFROM USER_INFOWHERE JOINED LIKE '2021%'AND AGE BETWEEN 20 AND 29

가격이 제일 비싼 식품의 정보 출력하기

[문제] FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요. [단계별 풀이] 1. 서브쿼리를 이용해서 가장 비싼 가격의 행을 필터링한다2. 식품 ID, 식품 이름, 식품 코드, 식품 가격을 선택한다3. 서브쿼리를 이용해야 동일한 최대 값을 가진 모든 행을 반환 받을 수 있다[정답]SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICEFROM FOOD_PRODUCTWHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT)

흉부외과 또는 일반외과 의사 목록 출력하기

[문제] DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요. [단계별 풀이] 1. 테이블에서 진료과과 CS이거나 GS인 행을 필터링한다2. 의사의 이름, 의사ID, 진료과, 고용일자를 선택한다3. 고용일자의 날짜 포맷이 다르다면 맞춰준다4. 고용일자를 기준으로 내림차순 정렬하고, 이름 기준으로 오름차순 정렬한다[정답]SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMDFROM DOCT..