PRACTICE/SQL 108

[MySQL] 3단계 1. 오랜 기간 보호한 동물(1)

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/59044SELECT A.NAME, A.DATETIME FROM ANIMAL_INS ALEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_IDWHERE B.ANIMAL_ID IS NULLORDER BY A.DATETIME LIMIT 3; 이 문제에서 LEFT JOIN 쓴 이유이 문제에서는 보호소에 들어온 동물 중 아직 입양을 못 간 동물을 찾는 것이 목표다. LEFT JOIN을 사용하여, ANIMAL_INS 테이블의 모든 데이터(입양 여부와 상관없이 보호소에 들어온 모든 동물)를 기준으로 하고 ANIMAL_OUTS 테이블을 조인한다. 이때, ANIMAL_O..

PRACTICE/SQL 2025.01.07

[MySQL] 2단계 36. 부모의 형질을 모두 가지는 대장균 찾기

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/301647SELECT C.ID AS ID, C.GENOTYPE AS GENOTYPE, P.GENOTYPE AS PARENT_GENOTYPEFROM ECOLI_DATA AS CJOIN ECOLI_DATA AS P ON C.PARENT_ID = P.IDWHERE (C.GENOTYPE & P.GENOTYPE) = P.GENOTYPEORDER BY C.ID;컬럼 선택C.ID는 자식 대장균의 ID,C.GENOTYPE은 자식 대장균의 형질,P.GENOTYPE은 부모 대장균의 형질이다.자기 조인ECOLI_DATA AS C는 자식 대장균ECOLI_DAT..

PRACTICE/SQL 2025.01.07

[MySQL] 2단계 34. 조건에 맞는 개발자 찾기

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/276034SELECT ID, EMAIL, FIRST_NAME, LAST_NAMEFROM DEVELOPERSWHERE SKILL_CODE & ( SELECT SUM(CODE) FROM SKILLCODES WHERE NAME IN ('Python', 'C#'))ORDER BY ID ASC; 전체 구조이 쿼리는 비트 연산자와 서브쿼리의 조합으로 특정 스킬 코드를 가진 개발자만 추출한다.결과를 아이디 기준으로 오름차순 정렬서브쿼리를 () 안에서 사용하는 이 방법은 인라인 서브쿼리라고 부른다.서브쿼리(Subquery)란 하나의 SQL문안에 포함되어 있는 또 다른 SQL문을 말한다.서브쿼리는 알려..

PRACTICE/SQL 2025.01.04

[MySQL] 2단계 33. 조건에 맞는 사원 정보 조회하기

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/284527SELECT SUM(HG.SCORE) AS SCORE, HE.EMP_NO, HE.EMP_NAME, HE.POSITION, HE.EMAILFROM HR_DEPARTMENT HDJOIN HR_EMPLOYEES HE ON HD.DEPT_ID = HE.DEPT_IDJOIN HR_GRADE HG ON HE.EMP_NO = HG.EMP_NOWHERE HG.YEAR = 2022GROUP BY HE.EMP_NO, HE.EMP_NAME, HE.POSITION, HE.EMAILORDER BY SCORE DESCLIMIT 1; 2022년도의 상·하반기 점수를 합산합산한 점수 기준으로 내림차순 정렬 후 ..

PRACTICE/SQL 2025.01.03

[MySQL] 2단계 32. 업그레이드 된 아이템 구하기

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/273711 SELECT ITEM_ID, ITEM_NAME, RARITYFROM ITEM_INFOWHERE ITEM_ID IN( SELECT A.ITEM_ID FROM ITEM_INFO I, ITEM_TREE A WHERE I.ITEM_ID = A.PARENT_ITEM_ID AND I.RARITY = 'RARE')ORDER BY ITEM_ID DESC;ITEM_INFO 테이블의 RARITY 컬럼 값이 'RARE'인 ITEM_ID를  ITEM_TREE 테이블에서 PARENT_ITEM_ID로 가지고 있는 아이템들을 조회하는 문제 서브쿼리로 ITEM_INFO 테이블의 RARIT..

PRACTICE/SQL 2025.01.03

[MySQL] 2단계 31. 분기별 분화된 대장균의 개체 수 구하기

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/299308 SELECT CONCAT(QUARTER(DIFFERENTIATION_DATE), 'Q') AS QUARTER, -- 분기 추출 후 'Q'를 붙여 형식화COUNT(ID) AS ECOLI_COUNT -- 해당 분기의 대장균 개체 수 집계FROM ECOLI_DATAGROUP BY QUARTER -- 분기별로 데이터를 그룹화ORDER BY QUARTER; QUARTER 함수는 날짜 데이터를 입력받아 해당 날짜가 속한 분기(1분기, 2분기 등)를 숫자로 반환하는 MySQL 함수이다.ex ) QUARTER('2024-04-15')는 2를 반환하며, 이는 4월이 2분기에 속하기 때문이다.

PRACTICE/SQL 2025.01.02

[MySQL] 2단계 30. 노선별 평균 역 사이 거리 조회하기

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/284531SELECT ROUTE, CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), "km") AS TOTAL_DISTANCE, CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), "km") AS AVERAGE_DISTANCEFROM SUBWAY_DISTANCEGROUP BY ROUTEORDER BY SUM(D_BETWEEN_DIST) DESC;  ORDER BY TOTAL_DISTANCE DESC; 라고 하면 틀리는 이유원인은 ORDER BY 절에서 문자형 데이터로 정렬이 시도되었기 때문이다.CONCAT 함수로 "km" 단위를 붙이..

PRACTICE/SQL 2025.01.02

[MySQL] 2단계 29. 자동차 평균 대여 기간 구하기

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/157342 SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATIONFROM CAR_RENTAL_COMPANY_RENTAL_HISTORYGROUP BY CAR_IDHAVING AVERAGE_DURATION >= 7ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC; 소수점 둘째 자리에서 반올림하라고 했으니 첫째자리까지만 나와야 한다.평균 대여 기간이 7일 이상인 데이터만 필터링집계 함수 결과에 대한 조건을 설정할 때는 HAVING 절을 사용해 그룹화 이후의 결과를 필터링해야 한..

PRACTICE/SQL 2025.01.01

[MySQL] 2단계 28. 특정 물고기를 잡은 총 수 구하기

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/298518 SELECT COUNT(*) AS FISH_COUNTFROM FISH_INFO FIJOIN FISH_NAME_INFO FNI ON FI.FISH_TYPE = FNI.FISH_TYPEWHERE FNI.FISH_NAME = "BASS" OR FNI.FISH_NAME = "SNAPPER"; 물고기 정보 테이블과 물고기 이름 정보 테이블을 조인하고찾으려는 물고기의 이름들을 where 조건에 걸고 count 함수를 사용해 물고기 수를 출력했다.

PRACTICE/SQL 2025.01.01
320x100