프로그래머스 | SQL 스터디 19 (재귀적 CTE) (완)
·
SQL/프로그래머스
SELECT⭐특정 세대의 대장균 찾기(Lv4)문제 설명​문제​풀이출처 :  https://20240228.tistory.com/258 이 문제를 Self join을 2번해서 (노가다) 풀었지만 더 좋은 풀이법이 있어서 출처를 남기고 올립니다. WITH에서 GNEREATION을 설정합니다 1세대의 경우, PARENT_ID가 NULL인 것이 1세대 입니다.UNION ALL로 중복이 없게 합치고추가적으로 PARENT_ID를 가지는 ID를 JOIN해서 세대를 추가합니다. 이렇게 푸는 것이 더 좋은 이유는 유지, 보수 측면에서 더 용이하기 때문입니다.세대라는 칼럼을 추가해서 향후에도 세대를 찾고 싶을때 더 편하게 찾을 수 있죠WITH RECURSIVE CTE AS ( SELECT ID, 1 AS GENERA..
프로그래머스 | SQL 스터디 18
·
SQL/프로그래머스
SELECT부모의 형질을 모두 가지는 대장균 찾기(Lv2)문제 설명​문제​풀이SELECT로 ID, GENOTYPE, PARENT_GENOTYPE를 조회 JOIN에서 PARENT_ID를 가지는 테이블(부모가 있는 ID)을 self-join으로 연결 WHERE에서 E.GENOTYPE과 D.GENOTYPE을 비트 연산자를 한 값이 D.GENOTYPE으로 설정(부모의 형질을 모두 가지는 개체를 찾기 위한 쿼리) ORDER BY 에서 ID로 오름차순 정렬SELECT E.ID, E.GENOTYPE, D.GENOTYPE PARENT_GENOTYPEFROM ECOLI_DATA EJOIN ECOLI_DATA D ON E.PARENT_ID = D.IDWHERE (D.GENOTYPE & E.GENOTYPE) = D.GENO..
프로그래머스 | SQL 스터디 17
·
SQL/프로그래머스
SELECT특정 형질을 가진 대장균 찾기(Lv1)문제 설명​문제​풀이SELECT로 COUNT를 조회 WHERE에서 GENOTYPE이 2번 형질을 가지지 않으면서(GENOTYPE&2 =0)GENOTYPE이 1번이나 3번 형질을 가지게 설정(GENOTYPE&1 > 0 or GENOTYPE&4 > 0)SELECT COUNT(*) AS CountFROM ECOLI_DATA WHERE GENOTYPE&2 =0 AND (GENOTYPE&1 > 0 or GENOTYPE&4 > 0); 대장균의 크기에 따라 분류하기2 (Lv3)문제 설명​문제​풀이WITH에서 NTILE(4)를  SIZE_OF_COLONY별로 설정하고 COLONY_RATE라고 지칭 SELECT로 ID, COLONY_NAME을 조회문제에서 요구한 조..
프로그래머스 | SQL 스터디 16
·
SQL/프로그래머스
SELECT대장균들의 자식의수 구하기(Lv3)문제 설명​문제​풀이SELECT로 ID, CHILD_COUNT를 조회 JOIN에서 selfjoin으로 ID와 PARENT_ID를 LEFT JOIN으로 연결* 개념적으로는 이렇게 구현해야 한다는 것을 알았지만, 방법을 잘 몰라 처음에는 WHERE ID=PARENT_ID로 구현함WHERE ID = PARENT_ID의 의미:이 조건은 동일한 개체가 부모 개체와 자식 개체가 되도록 강제합니다.즉, 동일한 레코드의 ID 값과 PARENT_ID 값이 같아야 하는 경우를 찾는다는 의미가 됩니다.그러나, 문제에서는 부모 개체의 ID와 자식 개체의 PARENT_ID가 서로 다른 행에 있어야 합니다.이런 문제점 때문에 self join으로 left join을 하는 것이 올바름!..
프로그래머스 | SQL 스터디 15 (SUBSTIRNG)
·
SQL/프로그래머스
SELECT가장 큰 물고리 10마리 구하기(Lv1)문제 설명​문제​풀이SELECT로 ID, LENGTH를 조회 ORDER BY에서 LENGTH 내림차순, ID 오름차순 정렬 LIMIT 10으로 상위 10마리 출력SELECT ID, LENGTHFROM FISH_INFOORDER BY LENGTH DESC, ID ASCLIMIT 10; 특정 물고리를 잡은 총 수 구하기(Lv2)문제 설명​문제​풀이SELECT로 COUNT로 FISH_COUNT를 조회 JOIN으로 공통 컬럼인 FISH_TYPE으로 두 테이블을 연결  WHERE에서 BASS, SNAPPER라는 FISH_NAME을 가진 것으로 제한SELECT COUNT(*) FISH_COUNTFROM FISH_INFO IJOIN FISH_NAME_INFO N ON..
프로그래머스 | SQL 스터디 14 (Union, Union all)
·
SQL/프로그래머스
SELECT★오프라인/온라인 판매 데이터 통합하기 (Lv4)문제 설명 ​문제​풀이SELECT로 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 조회 FROM에서 온라인 데이터와 오프라인 데이터를 각각 UNION ALL을 통해서 병합* 오프라인 데이터의 USER_ID는 NULL 처리* 22년 3월의 데이터로 한정 ORDER BY에서 SALES_DATE, PRODUCT_ID, USER_ID 순으로 오름차순 정렬※ 모든 서브쿼리에는 별칭이 필수이다!!SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNTFROM ( -- 온라인 데이터 SELECT SALES_DATE, PRODUCT_ID, U..
프로그래머스 | SQL 스터디 10
·
SQL/프로그래머스
SELECT재구매가 일어난 상품과 회원 리스트 구하기 (Lv2)문제 설명​문제 ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요. ​풀이SELECT로 회원 ID, 상품 ID 를 조회 GROUP BY에서 회원 ID, 상품 ID로 그룹화 HAVING에서 개수가 1보다 큰 것으로 지정 ORDER BY에서 회원 ID는 오름차순, 상품 ID는 내림차순 정렬SELECT USER_ID,PRODUCT_IDFROM ONLINE_SALEGROUP BY USER_ID, PRODUCT_IDHAVING ..
프로그래머스 | SQL 스터디 9
·
SQL/프로그래머스
SELECT강원도에 위치한 생산공장 목록 출력하기(Lv1)문제 설명​문제FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.​풀이SELECT로 공장 ID, 공장 이름, 주소를 조회​WHERE에서 강원도를 지정하기 위해 LIKE문을 활용SELECT FACTORY_ID, FACTORY_NAME, ADDRESSFROM FOOD_FACTORYWHERE ADDRESS LIKE '강원도%'; SUM, MAX, MIN잡은 물고기 중 가장 큰 물고기의 길이 구하기(Lv1)문제 설명​문제FISH_INFO 테이블에서 잡은 물고기 중 가장 큰 물고기의 길이를 'cm' 를 붙여 출력하는 SQL 문..