본문 바로가기

SQL71

[자동차 매출 데이터] 미국 베스트셀러 top 5 자동차 구하기 (서브쿼리) 본 포스팅은 아래 도서의 내용을 스터디, 참고했습니다. 최종 쿼리와 결과 select * from ( select * , row_number() over (order by sales desc) as ranking from (select productName, sum(priceEach * quantityordered) as sales from orders as a left join orderdetails as b on a.orderNumber = b.orderNumber left join products as c on b.productCode = c.productCode left join customers as d on d.customerNumber = a.customerNumber where countr.. 2023. 10. 5.
[자동차 매출 데이터] 연도별 재구매율 본 포스팅은 아래 도서의 내용을 스터디, 참고했습니다. 재구매율은 특정 기간 구매자 중, 특정 기간에 연달아 구매한 구매자의 비중이다. 연도별 재구매율을 구해 보자. 최종 쿼리와 결과 select country, substr(a.orderDate, 1, 4) as year ,count(distinct a.customerNumber) as BU_1 ,count(distinct b.customerNumber) as BU_2 ,count(distinct b.customerNumber) / count(distinct a.customerNumber) as retention_rate from orders as a left join orders b on a.customernumber = b.customernumber.. 2023. 10. 5.
[자동차 매출 데이터] 매출 top 5 국가와 매출 (서브쿼리) 본 포스팅은 아래 도서의 내용을 스터디, 참고했습니다. 최종 쿼리와 결과 select * from( select country, sales, dense_rank() over (order by sales desc) as sales_rank from ( select country , sum(priceEach * quantityordered) as sales from orders as a left join customers as b on b.customerNumber = a.customerNumber left join orderdetails as c on a.ordernumber = c.ordernumber group by 1 ) a ) b where sales_rank 2023. 10. 5.
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 문제 ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요. 풀이 이 문제의 핵심은 두 개 테이블을 UNION 하는 것이다. 조건에 맞게 온/오프라인 데이터를 필터링하고, 이를 union 한 후, 정렬 방식을 ORDER BY 로 지정하면 끝! 또한, 오프라인 데이터에서 USER_ID 는 Null 값으로 처리하라고 한 부.. 2023. 10. 4.
[프로그래머스] 조건에 부합하는 중고거래 댓글 조회하기 문제 USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해 주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해 주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해 주세요. 풀이 1 DATE_FORMAT()은 많이 사용하니 알아두자. 특정 형식으로 날짜형을 출력하고 싶을 때 지정한다. 이 문제의 핵심은 JOIN 후, 2022년 10월에 해당하는 데이터만 추출하는 것인데 풀이 1과 풀이 2 두 가지 방법을 확인하자. 풀이 1에서는 단순히 날짜형 칼럼의 구간을 지정하는 것으로, BETWEEN을 사용했다. SELECT a.TITLE.. 2023. 10. 4.
[프로그래머스] 서울에 위치한 식당 목록 출력하기 문제는 프로그래머스 홈페이지에서 더 자세히 확인하실 수 있습니다. https://school.programmers.co.kr/learn/courses/30/lessons/131118 문제 REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요. 풀이 SELECT info.REST_ID, info.REST_NAME, info.FOOD_TYPE, info.FAVORITES, info.ADDRESS, round(.. 2023. 10. 4.
[SQL] window 함수 (analytic SQL) 의미 원본 데이터 레벨을 그대로 유지하면서, 그룹핑 레벨에서 자유롭게 window의 이동과 크기를 조절하며 분석을 수행 사용법 (인자1, 인자2...) OVER [Partition 절] : 그룹화 컬럼명 [Sorting 절] : 정렬 컬럼명(window 이동방향 기준) [Window 절] : window 범위(row, range) 사용 예시 select * ,rank() over(order by hiredate asc) as hire_rank from emp el; 예시 처럼, partition절 지정을 따로 안해도 됨. / 지정하고 싶으면 "partition by (컬럼명)" 쓰기 sorting절 사용은 "order by (컬럼명)" 쓰기 sorting절에서 nulls first(디폴트, null값이 .. 2023. 3. 23.
[SQL] case when 구문 사용과 group by SELECT 절에 CASE WHEN 사용하기 select *, case when job = 'SALESMAN' then sal end as sales_sal, case when job = 'MANAGER' then sal end as manager_sal from emp e ; 쓰는 법 : case when ( 조건 ) then ( 조건 별로 보고 싶은 결과 ) else (조건을 제외한 나머지 경우) then ( 그 경우 보고 싶은 결과) end as (지정할 컬럼명) 위의 예시 처럼 else 를 따로 지정하지 않고, 바로 end as 로 끝내면 조건을 제외한 값은 null로 나옴! Else 를 지정하고 싶으면 else null End 로 끝냄 GROUP BY 절에 CASE WHEN 사용하기 select.. 2023. 3. 22.
[SQL] 쿼리쓰는 기본 순서 쿼리쓰는 기본 순서 SELECT 컬럼명 FROM 테이블명 WHERE 조건 (그룹바이 적용할 조건) GROUP BY 컬럼명 HAVING 조건 (그룹바이 결과에 대한 필터 조건) ORDER BY 컬럼명 많이 쓰다보면 괜찮겠지만, 헷갈릴 수 있으니! 특히 조건을 거는 where절과 having절이 group by 전후로 온다는 것 기억하기! 2023. 3. 21.
728x90