본문 바로가기
반응형

mysql7

노선별 평균 역 사이 거리 조회하기 [프로그래머스] 소수점으로 이루어진 역 사이 거리(D_BETWEEM_DIST)를 이용하여 전체 거리 합산, 평균 거리를 구하는 문제 ROUND를 이용하여 각각 둘째자리, 셋째자리 반올림을 해줘야 하며, 'km' 단위를 붙이기 위해 CONCAT을 사용한다.ROUTE로 묶고 SUM(D_BETWEEN_DIST) 값으로 내림차순 정렬을 준다. (CONCAT된 필드값으로 정렬시 문자열로 정렬되어 오답 처리, ("100.0km"이 "9.0"보다 뒤로 갈 수 있음)) SELECT ROUTE, CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE, CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTAN.. 2025. 8. 2.
대장균의 크기에 따라 분류하기 2 [프로그래머스] ECOLI_DATA 테이블의 SIZE_OF_COLONY 필드를 내림차순으로 정렬 후, 조회된 데이터들의 비율을 4등분으로 나눠서 명칭을 붙이는 문제. WITH ranked_data AS ( SELECT ID, NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) AS quartile FROM ECOLI_DATA ) SELECT ID, CASE WHEN quartile = 1 THEN 'CRITICAL' WHEN quartile = 2 THEN 'HIGH' WHEN quartile = 3 THEN 'MEDIUM' ELSE 'LOW' END AS COLONY_NAMEFRO.. 2025. 7. 27.
특정 세대의 대장균 찾기 [프로그래머스] ECOLI_DATA라는 테이블이 하나 있고, 이 테이블이 가진 PARENT_ID와 ID 컬럼을 이용하며 ID가 PARENT_ID를 재귀적으로 하나씩 타고 내려오는 구조이다. PARENT_ID가 NULL인 데이터는 ROOT에 해당하며, 3세대 즉, 두 번째로 파생된 ID를 구해내는 문제. WITH RECURSIVE TREE_CTE AS ( SELECT ID, PARENT_ID, 0 AS LEVEL FROM ECOLI_DATA WHERE PARENT_ID IS NULL UNION ALL SELECT T1.ID, T1.PARENT_ID, T2.LEVEL + 1 FROM ECOLI_DATA T.. 2025. 7. 27.
물고기 종류 별 대어 찾기 [프로그래머스] 잡은 물고기 정보 테이블 FISH_INFO와 물고기 이름 정보 테이블 FISH_NAME_INFO를 이용해서 각 물고기 별로 길이가 가장 큰 것을 하나씩 뽑아오는 문제 요구된 SELECT 컬럼 작성, FISH_TYPE 값으로 두 테이블 JOIN 후 서브쿼리를 사용해서 종류와 길이를 가져오는데 LENGTH는 FISH_TYPE으로 그루핑 한 후 MAX를 건다. SELECT FI.ID, FNI.FISH_NAME, FI.LENGTH FROM FISH_INFO FILEFT JOIN FISH_NAME_INFO FNI ON FI.FISH_TYPE = FNI.FISH_TYPEWHERE (FI.FISH_TYPE, FI.LENGTH) IN ( SELECT FISH_TYPE, MAX(LENGTH) FROM FISH_IN.. 2025. 7. 20.
특정 물고기를 잡은 총 수 구하기 [프로그래머스] 잡은 물고기 정보를 담은 테이블 FISH_INFO 과 물고기명이 저장된 FISH_NAME_INFO 테이블을 FISH_TYPE이라는 키값으로 LEFT JOIN 후, 구하려는 물고기 이름으로 조건을 준다 SELECT COUNT(*) AS FISH_COUNT FROM FISH_INFO FILEFT JOIN FISH_NAME_INFO FNION FI.FISH_TYPE = FNI.FISH_TYPEWHERE FNI.FISH_NAME IN ('BASS', 'SNAPPER') 2025. 7. 20.
특정 형질을 가지는 대장균 찾기 [프로그래머스] ECOLI_DATA 테이블의 GENOTYPE 컬럼을 2진수로 변환하여, 1번째 비트와 3번째 비트 둘 중 하나의 값이 1이면서 2번째 비트의 값은 0인 것을 집계하라는 문제 처음에는 GENOTYPE 값을 BIN()으로 이진수화 한 후, SUBSTRING 쳐서 구하려했으나 해당 함수들을 매 record마다 실행하므로 데이터가 많다면 성능이 비효율적임 SELECT COUNT(*) as COUNT FROM ECOLI_DATAWHERE (((GENOTYPE & 1) > 0) OR ((GENOTYPE & 4) > 0))AND (GENOTYPE & 2) = 0 위와 같이 GENOTYPE을 비트마스크 값과 '&'하여 비교 연산하면 됨1 -> 00012 -> 00103 -> 00114 -> 0100 2025. 7. 20.
반응형