본문 바로가기

SQL 공부16

사전캠프 달리기반 퀘스트 07 문제 7-1각 직원이 속한 부서에서 가장 높은 월급을 받는 직원들만 포함된 결과를 조회하는 SQL 쿼리를 작성해주세요. 출력 결과에는 직원의 이름, 부서, 그리고 월급이 포함되어야 합니다. [풀이] 부서별 월급액이 최대인 직원 조회! 직원명과 부서와 월급액 컬럼 필요! 부서별 최대 월급액 서브쿼리 만들고 직원 테이블에 조인한 담에 이름 부서 월급 조회하면 될 듯? [첫 시도]select Name , Department , Salary from ( select Department as depart , max(Salary) as sMax from employees e group by 1 ) SubQ /* department 둘 중 하나를 alias해주지 않으면 밑에 join할 때 오류 발생하더라.. 2024. 10. 24.
사전캠프 달리기반 퀘스트 06 문제 6-1 각 고객이 구매한 모든 제품의 총 금액을 계산하고, 고객 이름, 총 구매 금액, 주문 수를 출력하는 SQL 쿼리를 작성해주세요. [풀이]조인을 두 번 해야겠는디...? 아닌가 아무튼 해보자구...어 근데 뭔가 이상해서 확인해본 총 주문수가 6인데 기대 결과가 어떻게 3 2 2가 나오는 겨.....?뭐다냐.......... 그럼 기대결과는 무시하고 일단 문제 하라는대로 풀어보자....총 구매 금액은 Products 테이블의 Price 컬럼과 Orders테이블의 Quantity를 곱한 값을 담은 컬럼을, CustomerID 또는 CustomerName을 기준으로 그룹화하여 sum()으로 감싸면 되겄다.주문 수는  같은 기준에서 Order 테이블 count() 해주면 될 듯!  [첫 시도]sel.. 2024. 10. 23.
사전캠프 달리기반 퀘스트 05 문제 5-1각 직원의 이름, 부서, 월급, 그리고 그 직원이 속한 부서에서 가장 높은 월급을 받고 있는 직원의 이름과 월급을 조회하는 SQL 쿼리를 작성해주세요. [풀이] 일단 이름 순으로 정렬이 돼있음. 의도적으로 이름 첫 철자가 abcdefgh여. 그리고 Top_ 두 컬럼을 조회하려면 부서별 최대 연봉과 그 직원을 조회하는 서브쿼리가 필요할 듯? [첫 시도]/* 성공 코드 */select Name , Department , Salary , case when Department = 'HR' then (select name from employees e where department = 'HR' order by salary desc limit 1) when Department = 'IT' then .. 2024. 10. 22.
사전캠프 달리기반 퀘스트 03-04 문제 3 이용자의 포인트 조회하기이용자들 별로 획득한 포인트를 학생들에게 이메일로 보내려고 합니다. 이를 위한 자료를 가공해봅시다. 특히 users 테이블에는 있으나 point_users 에는 없는 유저가 있어요. 이 유저들의 경우 point를 0으로 처리합시다. [풀이] 우선 users 테이블과 point_users 테이블을 join해야하는데, 0포인트인 사람도 조회하려면 한 쪽에 없는 데이터도 합쳐주는 left join을 해야할 듯. 양쪽에 공통으로 user_id 컬럼이 있으니 얘를 기준으로 하고. 한 유저의 포인트 획득 정보가 여러 번 있을 수 있으니 sum()을 해야 하나? group by는 user_id로 하고.  그리고 0 point인 사람들은 point 컬럼에 null값이 있을 테니, 조회하.. 2024. 10. 20.
사전캠프 달리기반 퀘스트 01-02 문제 01 데이터 속 김서방 찾기 “김”씨로 시작하는 이용자들 수를 세어 보기로 했습니다. [힌트 보기 전]SELECT count(1) "name_cnt"FROM userWHERE SUBSTR(name, 1, 1) = '김' [힌트 본 후]한 명이 여러 가입 정보를 가질 수도 있겠구나... 결과에 차이가 없어서 오히려 넘어갈 뻔 했다중복 없이 세도록 수정해주자SELECT count(distinct email) "name_cnt"FROM userWHERE SUBSTR(name, 1, 1) = '김' 문제 02 날짜별 획득포인트 조회하기이용자들이 잘 활동하고 있는지 보고자 합니다. 포인트가 많을수록 활동을 잘하고 있다고 생각 할 수 있습니다. 날짜별로 획득한 포인트가 점점 늘어나는지 줄어드는지 확인해 봅시다.. 2024. 10. 19.
사전캠프 걷기반 퀘스트 11 (마지막 연습 문제) 모든 주문의 주문 ID와 주문된 상품의 이름을 나열하는 쿼리를 작성해주세요!SELECT o.id "주문ID" , p.name "상품명"FROM products p inner join orders o on p.id = o.product_id 총 매출(price * quantity의 합)이 가장 높은 상품의 ID와 해당 상품의 총 매출을 가져오는 쿼리를 작성해주세요!SELECT 상품ID , 총매출FROM ( SELECT o.product_id "상품ID" , o.quantity * p.price "총매출" , MAX(o.quantity * p.price) " 최고매출" FROM products p inner join orders o on p.id = o.product.. 2024. 10. 14.