MySQL 7

[SQL 쿼리테스트] 프로그래머스 Level1 복습

Level1 31문제 한 번에 다 풀기 문제별 복기사항*우선순위: JOIN 복습여러 기준으로 정렬하기: 기준 하나 빠트림, 정렬 기준 꼼꼼히 보기상위 N개 레코드: 날짜가 가장 오래된 것은 ASC + LIMIT 1 또는 MIN (DESC + LIMIT 1 아님)경기도에 위치한 식품창고 목록 출력하기: CASE-WHEN-THEN 구문 사용법 → (CASE WHEN 칼럼명 + 조건 THEN 값 ELSE 값 END) AS "칼럼명"가장 비싼 상품 구하기: ORDER BY + LIMIT은 부하 가능성(느림), 집계함수 서브쿼리는 빠름 흉부외과 또는 일반외과 의사 목록 출력하기: DATE_FORMAT(칼럼명, "%Y-%m-%d"), 칼럼에 여러 항목 리스트로 조건 걸 때 칼럼명 IN (항목1, 항목2) (IS I..

SQL 2025.11.22

[SQL 쿼리테스트] 6일차

프로그래머스 MySQL 레벨 2 문제풀이 1) 업그레이드 된 아이템 구하기 (풀이 완료)JOIN으로 푸려다가 실패하고 중첩 서브쿼리 형태로 변경SELECT ITEM_ID, ITEM_NAME, RARITYFROM ITEM_INFOWHERE ITEM_ID IN (SELECT ITEM_IDFROM ITEM_TREEWHERE PARENT_ITEM_ID IN (SELECT ITEM_IDFROM ITEM_INFOWHERE RARITY = "RARE"))ORDER BY ITEM_ID DESC; 2) ROOT 아이템 구하기 (풀이 완료)SELECT ITEM_ID, ITEM_NAMEFROM ITEM_INFOWHERE ITEM_ID IN (SELECT ITEM_IDFROM ITEM_TREEWHERE PARENT_ITEM_..

SQL 2025.08.22

[SQL 쿼리테스트] 5일차

프로그래머스 MySQL 레벨 2 문제풀이 1) 물고기 종류 별 잡은 수 구하기 (풀이 완료)틀린 이유1: COUNT(*) 대신 SUM(*)을 사용함 SUM(*)은 없는 집계함수임 (SUM(변수명)은 가능)틀린 이유2: LEFT JOIN 왼, 오 테이블 순서를 바꿔서 씀. SQL JOIN 개념 다시 공부해야 할듯SELECT COUNT(*) AS FISH_COUNT, FISH_NAMEFROM FISH_INFO t1 LEFT JOIN FISH_NAME_INFO t2 USING (FISH_TYPE)GROUP BY FISH_NAMEORDER BY FISH_COUNT DESC; 2) 노선별 평균 역 사이 거리 조회하기 (풀이 실패)반올림: ROUND(원래 값, 반올림 후 N번째 자리까지 표시)틀린 이유: SELEC..

SQL 2025.07.15

[SQL 쿼리테스트] 4일차

프로그래머스 MySQL 레벨 2 문제풀이1) 부모의 형질을 모두 가지는 대장균 찾기 (풀이 완료)틀린 이유: 비트 연산 사용 방법을 잘못 알고 있었음비트 연산은 숫자와 숫자 사이에 작동하며 이진수로 변환해주지 않아도 됨CONV(숫자, 10, 2) 와 BIN(숫자) 함수는 문자열을 반환하기 때문에 CONV & CONV = CONV 연산은 문자열 간의 비트 연산으로 간주되어 일반적인 숫자간 비트연산간 다르게 작동함# JOIN (기본 테이블 + 부모 GENOTYPE)SELECT d.ID, d.GENOTYPE, p.GENOTYPE AS PARENT_GENOTYPEFROM ECOLI_DATA d LEFT JOIN ECOLI_DATA p ON d.PARENT_ID = p.ID# 부모 타입과 비교WHERE d.GEN..

SQL 2025.06.09

[SQL 쿼리테스트] 3일차

프로그래머스 MySQL 레벨 1 문제풀이1) 강원도에 위치한 생산공장 목록 출력하기 (풀이 완료)SELECT FACTORY_ID, FACTORY_NAME, ADDRESSFROM FOOD_FACTORYWHERE ADDRESS LIKE "강원도%"ORDER BY FACTORY_ID ASC; 2) 최댓값 구하기 (풀이 완료)ORDER BY와 LIMIT를 사용할 시 자료 전체를 조회하고 그 중 하나를 골라내기 때문에 큰 테이블에서는 성능 저하를 일으킬 수 있으므로 집계함수(MAX) 사용 권장SELECT DATETIME AS "시간"FROM ANIMAL_INSORDER BY DATETIME DESCLIMIT 1; 3) 이름이 있는 동물의 아이디 (풀이 완료)SELECT ANIMAL_IDFROM ANIMAL_INS..

SQL 2025.06.08

[SQL 쿼리테스트] 2일차

프로그래머스 MySQL 레벨 1 문제 풀이1) 평균 일일 대여 요금 구하기 (풀이 완료)SELECT ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEEFROM CAR_RENTAL_COMPANY_CARWHERE CAR_TYPE = "SUV"; 2) 조건에 맞는 도서 리스트 출력하기 (풀이 완료)날짜 컬럼 출력 조건 확인하기 (DATE_FORMAT)그냥 출력하면 시:분:초까지 같이 출력됨SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, "%Y-%m-%d")FROM BOOKWHERE (PUBLISHED_DATE LIKE "2021-%") AND (CATEGORY = "인문")ORDER BY PUBLISHED_DATE ASC; 3) 과일로만든 아이스크림 고르기 (..

SQL 2025.06.06

[SQL 쿼리테스트] 1일차

프로그래머스 MySQL 레벨 1 문제 풀이 1) 특정 형질을 가지는 대장균 찾기 (풀이 실패)십진수를 이진수로 변환: CONV(칼럼명, 10, 2)텍스트 일부 추출: SUBSTRING(칼럼명, 시작 인덱스, 추출할 글자 개수)인덱스는 1부터 시작, 마지막 인덱스는 -1로 지정 가능MID 도 동일함글자 개수: CHAR_LENGTH(칼럼명)바이트 수: LENGTH(칼럼명)틀린 이유: 비트연산 풀이를 모름2) 가장 큰 물고기 10마리 구하기 (풀이 완료)SELECT ID, LENGTHFROM FISH_INFOORDER BY LENGTH DESC, ID ASCLIMIT 10; 3) 한 해에 잡은 물고기 수 구하기 (풀이 완료) SELECT COUNT(*) AS FISH_COUNTFROM FISH_INFOWHER..

SQL 2025.06.05