본문 바로가기

Data/SQL14

[프로그래머스] 물고기 종류 별 대어 찾기 : ROW_NUMBER( ) OVER( partition by ( ) ) -> COALESCE 처음에 한 실수는 :fish_type 으로 group by 를 하고 max(length) 를 적용 -> 서브쿼리로 테이블 조인ID 값이 다르게 들어감 해결 방법 :ROW_NUMBER() 로 순위를 나타낸 후 , COALESCE 로 NULL 값 처리 ROW_NUMBER 가 1인 것들만 뽑아내는 방법으로 해결select I.ID, N.FISH_NAME, I.LENGTHfrom (select ID, FISH_TYPE, LENGTH, ROW_NUMBER() OVER (partition by FISH_TYPE order by COALESCE(length,0) desc) as rnk from FISH_INFO ) Ileft join FISH_NAME_INFO N on i.FISH_TYPE = n.FIS.. 2025. 3. 13.
[ SQL] count, left join : 대장균들의 자식의 수 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/299305문제 설명대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다.다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE 은 각각 대장균 개체의 ID, 부모 개체의 ID, 개체의 크기, 분화되어 나온 날짜, 개체의 형질을 나타냅니다.대장균 개체의 ID(ID)와 자식의 수(CHILD_COUNT)를 출력하는 SQL 문을 작성해주세요. 자식이 없다면 자식.. 2024. 12. 18.
[SQL] 서브쿼리 작성하기 연습 select 절에서의 서브쿼리-- select절에서의 서브쿼리 만들기select dept_name, (select count(*) from employee) as count from department;    from 절에서의 서브쿼리-- 남녀별 3명씩 조회SELECT emp_name, emp_id, gender, dept_id, hire_date, salary FROM (SELECT ROW_NUMBER() OVER(PARTITION BY gender ORDER BY emp_name ASC) AS num, emp_name, emp_id, gender, dept_id, hire_date, salary FROM employee WHERE retire_date IS NULL) AS emp.. 2024. 12. 17.
[SQL] 프로그래머스 : DATEFORMAT(칼럼, '유형') -- 코드를 입력하세요SELECT BOOK_ID, AUTHOR_NAME, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE FROM BOOK AS b JOIN AUTHOR AS j ON b.AUTHOR_ID = j.AUTHOR_ID WHERE b.CATEGORY = '경제' ORDER BY PUBLISHED_DATE ASC; 2024. 12. 12.
[SQL] 프로그래머스 업그레이드 된 아이템 구하기 : WHERE IN 서브쿼리 item_information 테이블 & item_tree 테이블이 있음item information 의 rarity 가 rare한 아이템들이 있음이 rare 한 아이템들을 업그레이드 할 수 있는데, 어떤 것으로 업그레이드 할 수 있는지는 item_tree 테이블의PARENT_ITEM_ID 칼럼에 나와있음 --> rare한 아이템들을 업그레이드 했을 때 : 업그레이드 한 아이템의 id, name, rarity를 출력해는 것이 문제 (PARENT_ITEM_ID 는 업그레이드 이전의 아이템. 따라서, item_id를 PARENT_ITEM_ID로 가지고 있는 아이템을 출력해야 됨)  ** 여기서 어려웠던 부분은 :- 업그레이드 된 아이템을 어떤 로직으로 출력해 낼 것인가?정답은 WHERE ____ IN (서.. 2024. 12. 12.
[SQL] 프로그래머스 문제 : 조건에 맞는 개발자 찾기 (DISTINCT, JOIN ON & 연산) SKILLCODES 테이블은 개발자들이 사용하는 프로그래밍 언어에 대한 정보를 담은 테이블입니다. SKILLCODES 테이블의 구조는 다음과 같으며, NAME, CATEGORY, CODE는 각각 스킬의 이름, 스킬의 범주, 스킬의 코드를 의미합니다. 스킬의 코드는 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있습니다. DEVELOPERS 테이블은 개발자들의 프로그래밍 스킬 정보를 담은 테이블입니다. DEVELOPERS 테이블의 구조는 다음과 같으며, ID, FIRST_NAME, LAST_NAME, EMAIL, SKILL_CODE는 각각 개발자의 ID, 이름, 성, 이메일, 스킬 코드를 의미합니다. SKILL_CODE 컬럼은 INTEGER 타입이고, 2진수로 표현했을 때 각 .. 2024. 12. 11.
[SQL] 프로그래머스 SQL 문제 : (HAVING 사용)재구매가 일어난 상품과 회원 리스트 구하기 GROUP BY 와 HAVING 을 어떻게 쓰냐가 핵심인 문제 같은 회원이 같은 상품을 재구매 한다:(1) 회원 번호와 상품 번호를 그룹화 (2) 그룹화 된 회원번호 - 상품번호 pair 에서 2개 이상 같은 것을 찾아내는 작업-- 코드를 입력하세요SELECT USER_ID, PRODUCT_ID FROM ONLINE_SALE GROUP BY USER_ID, PRODUCT_ID --각 칼럼 별로 group화 시켜주고 HAVING COUNT(*) > 1 -- 그룹화 했을 때 user_id가 2개 이상인 경우 ORDER BY USER_ID ASC, PRODUCT_ID DESC;   having 사용 연습-- having 사용 연습select dept_name, avg(salary.. 2024. 12. 11.
[SQL] JOIN 서로 다른 테이블을 합치는 JOIN SELECT emp_id, emp_name, dept_id, phone, email FROM employee WHERE retire_date IS NULL; employee 테이블에 department_name 을 추가하고 싶을 때:department_name은 department 테이블에 있음deparment table에서 department_name을 가져와야 됨* 어떤 값을 기준으로 가져올까?  기준이 되는 값이 있어야 됨parent table -> child table의 관계를 잘 파악해야 됨JOIN 연산 수행- JOIN 합칠테이블 ON 현재테이블.기준열 = 합칠테이블.기준열-- JOIN 으로 두 테이블 합치기SELECT emp_id, emp_name, emp.. 2024. 12. 4.
[SQL] 데이터베이스 집계 집계 함수SUM , AVG, MAX, MIN, COUNT ** null 값은 포함하지 않음(무시)countall -> count(*) 만 null 값 무시 x (행 수를 구하는 함수) 1. SUM -- 재직중인 직원 급여 총액 조회SELECT SUM(salary) AS tot_salary FROM employee WHERE retire_date IS NULL; 2. AVG-- 재직중인 직원의 평균 임금SELECT AVG(salary) AS avg_salary FROM employee WHERE retire_date IS NULL;-- null 값을 0으로 처리하고 평균 구하기SELECT AVG(IFNULL(salary, 0)) AS avg_salary FROM employee WHERE ret.. 2024. 12. 4.