본문 바로가기
728x90
반응형

SQL37

DAY 15. 문제 51~60 (Lv.4) 53. 재구매가 일어난 상품과 회원 리스트 구하기 ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬 select user_id, product_idfrom online_salegroup by user_id, product_idhaving count(*) >= 2order by user_id asc, product_id desc1) user_id, product_id 세트(group by 한 묶음)에 대해서2) having 을 통해 count(*)해서 2개 이상이 나오는 것만 추.. 2025. 6. 3.
SQL 과제 개요더보기제공 Kaggle 데이터셋 - Credit Card customers (Naive_Bayes_classifier 컬럼은 제외)목표신용카드 고객 데이터를 분석해 마케팅 전략을 수립할 수 있도록 인사이트를 도출.아래의 요구사항들에 대해 SQL 쿼리로 응답해보는 것이 과제의 핵심준비 : 데이터 불러오기1. 파일 다운로드, 압축 해제2. CSV파일을 열기 > Naive_bayes_classifier 컬럼 2개 삭제 > 저장3. DBeaver 열기 > mysql* 아래 Databases 파일 (마우스 우측 클릭)* MySql 다운 선행되어야 함. 안 했다면 링크 참조 > MySQL다운로드 안내4. Create New Database > database name: sparta 입력 > Tables (.. 2025. 6. 2.
DAY 12. 문제 1~10 (Lv.1) 3. 중복 제거하기문제 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL문을 작성. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 친다.select count(distinct name) as countfrom animal_inswhere name is not null1) 중복되는 이름은 하나로 친다= distinct를 써라2) is not nullnull 값을 비교할 때는 is / is not 사용나머지는 비교 연산자 ( = , != , ) 나 IN 연산자를 사용** 비교연산자 vs IN 연산자비교 : 한 번에 하나의 값과만 비교IN연산자: 여러 값 중 하나와 일치하는지 확인. OR조건을 간단하게 표현할 수 있음. 6. 동명 동물 수 구하기 문제 동물 보호소에 들어온 .. 2025. 5. 31.
SQL 56-60. 56. 특정 옵션이 포함된 자동차 리스트 구하기 CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬 select car_id, car_type, daily_fee, optionsfrom car_rental_company_carwhere options like '%네비게이션%'order by car_id desc★ 출제포인트like 를 써서 네비게이션이 있는지 확인 57. 조건에 부합하는 중고거래 상태 조회하기 USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거.. 2025. 5. 30.
SQL 51-55. 51. 없어진 기록 찾기 천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성 select o.animal_id, o.namefrom animal_outs o left join animal_ins i on o.animal_id = i.animal_idwhere i.animal_id is nullorder by animal_id★ 출제포인트outs에는 정보가 있는데, ins에는 정보가 없는 항목을 찾아야 하므로 outs를 기준으로 left join 해야 함 52. 과일로 만든 아이스크림 고르기 상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주.. 2025. 5. 30.
SQL 46-50. 46. 대여 기록이 존재하는 자동차 리스트 구하기 CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬 46-1. inner join, distinctselect distinct c.car_idfrom car_rental_company_car c join car_rental_company_rental_history h on c.car_id = h.car_idwhere c.car_type = '세단' and month(h.start_.. 2025. 5. 30.
SQL 41-45. 41. 조건에 맞는 도서 리스트 출력하기 BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요. 결과는 출판일을 기준으로 오름차순 정렬select book_id, date_format(published_date, '%Y-%m-%d') as published_datefrom bookwhere year(published_date) = 2021 and category = '인문'order by published_date★ 출제포인트데이터 타입 및 포맷where로 조건 필터링order by로 출판일 오름차순 정렬 42. 평균 일일 대여 요금 구하기 CAR_RENTAL_.. 2025. 5. 30.
SQL 31-35. 31. 오랜 기간 보호한 동물아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다. select ins.name, ins.datetimefrom animal_ins ins left join animal_outs outs on ins.animal_id = outs.animal_idwhere outs.animal_id is nullorder by datetime asclimit 3★ 중요 (출제 포인트)left join 사용order by datetime asc 보호 시작일 순 정렬limit 3 상위 3개 결과만 출력 32. 카테고리별 도서 판매량 집계하기 2022년 1월의 카.. 2025. 5. 28.
SQL 26-30. 26. 입양 시각 구하기 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬1. hourselect hour(datetime) as hour, count(*)from animal_outswhere hour(datetime) between 09 and 19group by hour(datetime)order by hour(datetime) 2. date_formatselect date_format(datetime, '%H') as hour, count(*)from animal_outswhere date_format(datetime.. 2025. 5. 27.
LV 1. 중복 제거하기 중복 제거하기 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩 SELECT count(distinct name) as countfrom animal_inswhere name is not null ★ 오답노트 1.group by → 그룹별 집계(ex. 이름별 빈도수)count(distinct) → 고유값의 총 개수 집계 (ex. 중복 없는 이름 수) ★ 오답노트 2. 집계함수(count, sum, avg등)은 반드시 group by가 필요한 것은 아님집계함수는 전체 테이블에 대해 한 번에 계산을 수행할 수 있음. 예컨대 위의 문제처럼, 전체 행의 개수를 알고 싶을 때는 단순히 select coun.. 2025. 5. 27.
LV 1. 상위 n개 레코드 상위 n개 레코드 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성풀이1 - order by 와 limitselect namefrom animal_insorder by datetime asclimit 1 풀이2 - rank() over 와 limitselect namefrom(select name, rank() over (order by datetime) as rnkfrom animal_inslimit 1) a 2025. 5. 26.
LV 1. 동명 동물 수 찾기 동명 동물 수 찾기 문제 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회 select distinct name, count(name) as countfrom animal_inswhere name is not nullgroup by namehaving count > 1order by name 오답노트 1.count(name)을 하고 나서 group by name을 해야 이름별 개수가 뜸 안 그럼 name 컬럼의 첫 행 값만 뜸 = 이유) count(*)는 집계함수인데, 그룹화되지 않은 일반 컬럼과 쓰이면 첫 행만 나옴select > from > .. 2025. 5. 26.
DAY 11. LV 21. 가격대별 상품 개수 구하기 PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬 select floor(price / 10000) * 10000 as price_group, count(*) as productsfrom productgroup by price_grouporder by price_group asc★ 오답노트 : FLOOR(숫자)소수점 이하를 무조건 버리고 "작거나 같은 가장 큰 정수".. 2025. 5. 26.
SQL 22-25. 22. 조건에 맞는 회원수 구하기 USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성 select count(*) as usersfrom user_infowhere year(joined) = 2021 and age between 20 and 29★ 중요between 1 and 2 = 1이상 2이하 = 1, 2 임 23. 중성화 여부 파악하기 보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 '.. 2025. 5. 26.
DAY 10. LV 21. 상품별 오프라인 매출 구하기 PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬.select p.product_code, sum(p.price * s.sales_amount) as salesfrom product p join offline_sale s on p.product_id = s.product_idgroup by p.product_codeorder by sales desc, p.product_code asc★ 오답노트 : 집계함수 없이 group by만 쓰면, 합계가 아니라 임의의 한 행만 나.. 2025. 5. 23.
SQL 19-21. 19. 흉부외과 또는 일반외과 의사 목록 출력하기 DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬.select dr_name, dr_id, mcdp_cd, date_format(hire_ymd, '%Y-%m-%d') as hire_ymdfrom doctorwhere mcdp_cd in ('CS', 'GS')order by hire_ymd desc, dr_name asc20. 가격이 가장 비싼 식품의 정보 출력하기 FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식.. 2025. 5. 23.
DAY 9. LV 21. 조건에 맞는 개발자 찾기 Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성. 결과는 ID를 기준으로 오름차순 정렬.select d.id, d.email, d.first_name, d.last_namefrom developers d join skillcodes s on (d.skill_code & s.code) != 0where s.name in ('python', 'c#')group by d.id, d.email, d.first_name, d.last_nameorder by d.id asc★ 오답노트1) 비트연산을 이해하자 ① 개념비트(Bit) 컴퓨터는 모든 .. 2025. 5. 22.
SQL 16-18. 16. 경기도에 위치한 식품창고 목록 출력하기경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬 IFNULLselect warehouse_id, warehouse_name, address, ifnull(freezer_yn, 'N')from food_warehousewhere address like '%경기도%'order by warehouse_idCASE WHENselect warehouse_id, warehouse_name, address, case when freeze.. 2025. 5. 22.
DAY 8. LV 21. 조건에 맞는 사원 정보 조회하기 HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보를 조회하려 합니다. 2022년도 평가 점수가 가장 높은 사원들의 점수, 사번, 성명, 직책, 이메일을 조회하는 SQL문을 작성. 2022년도의 평가 점수는 상,하반기 점수의 합을 의미하고, 평가 점수를 나타내는 컬럼의 이름은 SCORE로 작성. 1. WITH 사용with sum_score as (select g.emp_no, sum(g.score) as scorefrom hr_grade gwhere g.year = 2022group by g.emp_no)select s.score, e.emp_no, .. 2025. 5. 21.
SQL 13-15. 13. 나이 정보가 없는 회원 수 구하기 나이 정보가 없는 회원이 몇 명인지 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 USERS로 지정 select count(*) as usersfrom user_infowhere age is null 참고: is not null / , != '단어' 14. 가장 비싼 상품 구하기 판매 중인 상품 중 가장 높은 판매가를 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 MAX_PRICE로 지정select max(price) as max_pricefrom product 15. NULL처리하기 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 .. 2025. 5. 21.
728x90
반응형