sql 58

[MySQL] 프로그래머스 노선별 평균 역 사이 거리 조회하기

문제:SUBWAY_DISTANCE 테이블에서 노선별로 노선, 총 누계 거리, 평균 역 사이 거리를 노선별로 조회- 총 누계거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합을 의미- 총 누계거리는 소수 둘째자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림 한 뒤 단위(km)를 함께 출력- 총 누계 거리를 기준으로 내림차순 정렬 해결방법:1. 총 누계 거리와 평균 역 사이의 거리는 SUM, AVG 를 GROUP BY 와 함께 사용2. CONCAT, ROUND 로 형식 맞추기3. ORDER BY 조건 설정에 주의 예시 코드:SELECT ROUTE , CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') TOTAL_DISTANCE , CONCAT(ROUND(A..

[SQL] 연습 2025.02.16

[MySQL] 프로그래머스 가장 큰 물고기 10마리 구하기

문제:FISH_INFO 테이블에서 가장 큰 물고기 10마리의 ID와 길이를 출력 - 길이를 기준으로 내림차순 정렬하고, 길이가 같다면 물고기의 ID에 대해 오름차순 정렬 - 가장 큰 물고기 10마리 중 길이가 10cm 이하인 경우는 없음 해결방법:1. 길이가 가장 큰 물고기 10 마리를 출력하기 위해서 길이를 기준으로 내림차순 정렬2. LIMIT 을 이용해서 10 마리 까지만 조회3. WHERE 에서 길이 조건 설정 예시 코드:SELECT ID, LENGTHFROM FISH_INFOWHERE LENGTH > 10ORDER BY LENGTH DESC, ID ASCLIMIT 10;

[SQL] 연습 2025.02.06

[MySQL] 프로그래머스 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

문제:테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력- 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬- 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외 해결방법:1. 기간 내 총 대여 횟수가 5회 이상인 자동차 ID 값 구하기2. 월과 자동차 ID 값을 기준으로 COUNT() 하기3. WHERE 에서 기간 설정에 주의하기 예시 코드:SELECT MONTH(START_DATE) MONTH, T1.CAR_ID, COUNT(T1.CAR_ID) RECORDSFROM CAR_RENTAL_COMPANY_RE..

[SQL] 연습 2025.02.02

[MySQL] 프로그래머스 헤비 유저가 소유한 장소

문제:공간을 둘 이상 등록한 사람이 등록한 공간의 정보를 아이디 순으로 조회 해결방법:1. GROUP BY 와 COUNT 로 호스트별 등록 공간 수 카운트2. 등록 공간의 수가 2 이상인 호스트ID를 이용해서 장소 테이블 INNER JOIN 예시 코드:SELECT T1.ID, T1.NAME, T1.HOST_ID FROM PLACES T1INNER JOIN(SELECT HOST_ID, COUNT(HOST_ID)FROM PLACESGROUP BY HOST_IDHAVING COUNT(HOST_ID) >= 2) T2ON T1.HOST_ID = T2.HOST_IDORDER BY T1.ID;

[SQL] 연습 2025.01.29

[MySQL] 프로그래머스 년, 월, 성별 별 상품 구매 회원 수 구하기

문제:USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계 - 결과는 년, 월, 성별을 기준으로 오름차순 정렬 - 성별 정보가 없는 경우 결과에서 제외 해결방법:1. 유저 테이블과 판매내역 테이블을 INNER JOIN2. SALES_DATE 컬럼에서 YEAR와 MONTH 를 추출3. SELECT 절에서 COUNT DISTINCT 와 GROUP BY 를 사용하여 USER_ID 를 카운트4. WHERE 조건으로 성별이 NULL 값이 아닌 경우만 사용하도록 함 예시 코드:SELECT YEAR(SALES_DATE) YEAR, MONTH(SALES_DATE) MONTH, GENDER, COUNT(DISTINCT USER_ID) USERSFROM(SELECT ..

[SQL] 연습 2025.01.28

[MySQL] 프로그래머스 우유와 요거트가 담긴 장바구니

문제:우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회 해결 방법:1. 장바구니ID 별로 GROUP_CONCAT 을 해서 장바구니 내용을 조회2. 장바구니에 우유와 요거트가 같이 담겨있는지 조건 설정 예시 코드:SELECT CART_IDFROM (SELECT CART_ID, GROUP_CONCAT(NAME) NAMESFROM CART_PRODUCTSGROUP BY CART_ID) T1WHERE NAMES LIKE "%Milk%" AND NAMES LIKE "%Yogurt%"ORDER BY CART_ID;

[SQL] 연습 2025.01.26

[MySQL] 프로그래머스 저자 별 카테고리 별 매출액 집계하기

문제:2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가), 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력 - 결과는 저자 ID를 오름차순, 카테고리를 내림차순 정렬 해결방법:1. 도서 판매 테이블에서 판매일에 대한 기준을 WHERE 절에서 설정2. 책 ID를 기준으로 한 INNER JOIN과 저자 ID 를 기준으로 한 INNER JOIN이 필요3. GROUP BY 로 저자 별, 카테고리 별 매출액을 계산 예시 코드:SELECT A.AUTHOR_ID, AUTHOR_NAME, CATEGORY, SUM(TOTAL_SALES) TOTAL_SALESFROM AUTH..

[SQL] 연습 2024.12.29

[MySQL] 프로그래머스 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

문제:조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬 해결방법:1. 파일경로 출력을 위해서 CONCAT 사용2. 조회수와 파일명 테이블을 BOARD_ID 기준으로 INNER JOIN3. WHERE 절에서 최대 조회수 조건 설정4. ORDER BY 내림차순 정렬 예시 코드:SELECT CONCAT('/home/grep/src/', F.BOARD_ID, '/', F.FILE_ID, F.FILE_NAME, F.FILE_EXT) FILE_PATHFROM USED_GOODS_BOARD BINNER JOIN USED_GOODS_FILE FON B.BOARD_ID = F.BOARD_IDWHERE B.VIEWS = (SELECT MAX(VIEWS)..

[SQL] 연습 2024.12.28

[MySQL] 프로그래머스 자동차 평균 대여 기간 구하기

문제:평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간 리스트를 출력 - 평균 대여 기간은 소수점 두번째 자리에서 반올림 - 평균 대여 기간을 기준으로 내림차순 정렬, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬 해결방법:1. 평균 대여 기간은 ID를 기준으로 GROUP BY, AVG 사용2. 대여 기간을 계산하기 위해서는 DATEDIFF 사용3. ORDER BY 로 정렬 예시 코드:SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AVERAGE_DURATIONFROM CAR_RENTAL_COMPANY_RENTAL_HISTORYGROUP BY CAR_IDHAVING AVERAGE_DURATION >= 7..

[SQL] 연습 2024.12.24

[MySQL] 프로그래머스 자동차 대여 기록에서 장기/단기 대여 구분하기

문제:대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 대여기록을 출력 - 결과는 대여 기록 ID를 기준으로 내림차순 정렬 해결방법:1. 대여기간 차이는 DATEDIFF() 함수를 사용2. IF 문으로 장기 대여와 단기 대여 구분3. DATE_FORMAT() 으로 날짜 형식 설정4. 대여 시작일은 WHERE 절에서 BETWEEN A AND B 로 설정 예시 코드:SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, "%Y-%m-%d") START_DATE, DATE_FORMAT(END_DATE, "%Y-%m-%d") END_DATE, IF(DATEDIFF(END_DATE, S..

[SQL] 연습 2024.12.22

[MySQL] 프로그래머스 특정 물고기를 잡은 수 구하기

문제:FISH_INFO 테이블에서 잡은 BASS와 SNAPPER의 수를 출력 해결방법:1. 종류별 수가 아닌 전체 수를 구하면 되므로 COUNT() 사용2. FISH_INFO 테이블과 FISH_NAME_INFO 테이블을 INNER JOIN3. WHERE - IN 을 사용하여 BASS 와 SNAPPER 만 조회 예시 코드:SELECT COUNT(1) FISH_COUNTFROM FISH_INFO T1INNER JOIN FISH_NAME_INFO T2ON T1.FISH_TYPE = T2.FISH_TYPEWHERE T2.FISH_NAME IN ("BASS", "SNAPPER");

[SQL] 연습 2024.12.21

[MySQL] 프로그래머스 서울에 위치한 식당 목록 출력하기

문제:서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회 - 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 - 결과는 평균점수를 기준으로 내림차순 정렬, 즐겨찾기수를 기준으로 내림차순 정렬 해결방법:1. 리뷰 평균점수는 식당 ID 별 GROUP BY로 계산2. 식당 ID 로 식당 정보 테이블과 리뷰 테이블을 조인3. 서울에 위치한 식당을 찾기 위해 LIKE 사용4. ORDER BY 로 점수와 즐겨찾기 수 기준으로 내림차순 정렬 예시 답안:SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, ADDRESS, ROUND(AVG(R.REVIEW_SCORE), 2) AS SCOREFROM REST_INFO AS..

[SQL] 연습 2024.12.20

[MySQL] 프로그래머스 조건에 맞는 사원 정보 조회하기

문제:2022년도 평가 점수가 가장 높은 사원들의 점수, 사번, 성명, 직책, 이메일을 조회 해결방법:1. GROUP BY 로 평가 점수 상하반기 SUM()2. 2022년도에 해당하는 점수만 계산하도록 설정3. 가장 높은 평가 점수 확인을 위해 MAX() 사용4. 여러 테이블 조인에 INNER JOIN 사용5. HAVING 을 사용하여 최고 점수를 가진 레고드 반환 예시 코드:SELECT SUM(G.SCORE) SCORE, G.EMP_NO, E.EMP_NAME, E.POSITION, E.EMAILFROM (SELECT * FROM HR_GRADE WHERE YEAR = 2022) GINNER JOIN HR_EMPLOYEES EON G.EMP_NO = E.EMP_NOGROUP BY G.E..

[SQL] 연습 2024.12.08

[MySQL] 취소되지 않은 진료 예약 조회하기

문제PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회- 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 컬럼을 출력- 진료예약일시를 기준으로 오름차순 정렬 해결방법1. 조건 3개를 동시에 설정: 예약일시, 진료과코드, 취소여부2. APPOINTMENT 테이블을 기준으로 PATIENT, DOCTOR 테이블을 INNER JOIN3. 정렬 조건 설정 예시 코드SELECT APNT.APNT_NO, P.PT_NAME, P.PT_NO, APNT.MCDP_CD, D.DR_NAME, APNT.APNT_YMDFROM APPOINTMENT APNT INNER JOIN PATIENT P ON P.PT_..

[SQL] 연습 2024.12.06

[MySQL] 프로그래머스 자동차 대여 기록에서 대여 가능여부 구분하기

문제:자동차 ID와 AVAILABILITY 리스트를 출력- 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시- 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬 해결방법:1. IF 문과 BETWEEN A AND B 를 활용하여 가능여부 판단하기2. GROUP BY 를 통해 자동차별 가능 여부 정리하기3. 마지막으로 CASE 문으로 원하는 형태의 출력 만들기 예시 코드:SELECT CAR_ID, CASE SUM(IF(DATE("2022-10-16") BETWEEN START_DATE AND END_DATE, 1, 0))WHEN 1 THEN "대여중"WHE..

[SQL] 연습 2024.11.29