ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코드카타 / SQL 과제
    [스파르타코딩클럽]데이터분석 과정/TIL,WIL 2024. 3. 28. 19:45

    코드카타

    년,월,성별 별 상품 구매 회원 수 구하기
    년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요.
    결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
    • 테이블 2개 : JOIN
    • 성별 정보가 없는 경우 결과에서 제외해주세요. : WHERE IS NOT NULL
    • 년, 월, 성별 별 : GROUP BY
    • 오름차순 정렬 : ORDER BY
    SELECT YEAR(O.SALES_DATE) AS YEAR, MONTH(O.SALES_DATE) AS MONTH, U.GENDER AS GENDER, COUNT(DISTINCT U.USER_ID) AS  USER
    FROM USER_INFO U JOIN ONLINE_SALE O ON U.USER_ID = O.USER_ID
    WHERE U.GENDER IS NOT NULL
    GROUP BY YEAR, MONTH, GENDER
    ORDER BY YEAR, MONTH, GENDER;

     

    서울에서 위치한 식당 목록 출력하기
    서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회
    이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬
    평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
    • 테이블 2개 : JOIN
    •  리뷰 평균점수 : AVG
    • 소수점 세 번째 자리에서 반올림 해주시고 : ROUND(,2)
    • 서울에 위치한 식당 : WHERE LIKE '서울%'
    SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, ROUND(AVG(R.REVIEW_SCORE),2) AS SCORE
    FROM REST_INFO I 
    JOIN REST_REVIEW R 
    ON I.REST_ID = R.REST_ID
    WHERE I.ADDRESS LIKE '서울%'
    GROUP BY I.REST_ID
    ORDER BY SCORE DESC, I.FAVORITES DESC;

     

    Print Prime Numbers
    이 쿼리는 1000 이하의 모든 소수를 출력합니다.
    소수는 1과 자기 자신을 제외하고 어떤 양의 정수로도 나누어지지 않는 수입니다.
    결과를 한 줄에 출력하며 구분자로 ampersand (&) 문자를 사용합니다.
    예를 들어, 10 이하의 모든 소수에 대한 출력은 다음과 같습니다:
    2&3&5&7
    • 2부터 시작 -> 재귀적인 쿼리 : WITH
    • 해당 테이블에 계속해서 값을 추가  : UNION ALL
    • N값 증가 : N+1
    • 구분자로 ampersand (&) 문자를 사용 : GROUP_CONCAT
    • 소수 확인 : WHERE
    WITH RECURSIVE num AS (
        SELECT 
            2 AS n
        UNION ALL
        SELECT 
            n+1
        FROM num
        WHERE n < 1000
    )
    SELECT 
        GROUP_CONCAT(n ORDER BY n SEPARATOR '&')
    FROM num
    WHERE n NOT IN (
        SELECT 
            DISTINCT bnum.n
        FROM num AS bnum
            JOIN num AS snum
                ON bnum.n > snum.n 
                    AND bnum.n % snum.n = 0
    )
    ;

     


    SQL 숙제

    가장 비싼 상품 구하기
     판매 중인 상품 중 가장 높은 판매가를 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 MAX_PRICE로 지정해주세요.
    • 가장 높은 판매가 : MAX
    SELECT max(PRICE) MAX_PRICE 
    from PRODUCT

     

    월별 잡은 물고기 수 구하기
    잡은 물고기 수 컬럼명은 FISH_COUNT, 월 컬럼명은 MONTH로 해주세요.
    결과는 월을 기준으로 오름차순 정렬해주세요.
    단, 월은 숫자형태 (1~12) 로 출력하며 9 이하의 숫자는 두 자리로 출력하지 않습니다.
    잡은 물고기가 없는 월은 출력하지 않습니다.
    • 잡은 물고기 수 : COUNT
    • 월을 기준 : GROUP BY
    • 오름차순 정렬  : ORDER BY
    SELECT COUNT(ID) AS FISH_COUNT, MONTH(TIME) AS MONTH
    FROM FISH_INFO
    GROUP BY MONTH
    ORDER BY MONTH;

     

    노선별 평균 역 사이 거리 조회하기
    노선별로 노선, 총 누계 거리, 평균 역 사이 거리를 노선별로 조회하는 SQL문을 작성해주세요.
    총 누계거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합을 뜻합니다.
    총 누계 거리와 평균 역 사이 거리의 컬럼명은 각각 TOTAL_DISTANCE, AVERAGE_DISTANCE로 해주시고,
    총 누계거리는 소수 둘째자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림 한 뒤 단위(km)를 함께 출력
    결과는 총 누계 거리를 기준으로 내림차순 정렬해주세요.
    • 총 누계거리 : SUM
    • 평균 역 사이 거리 : AVG
    • 총 누계거리는 소수 둘째자리 : ROUND(,1)
    • 평균 역 사이 거리는 소수 셋째 자리 : ROUND(,2)
    • 단위(km)를 함께 출력 : CONCAT(,'KM')
    • 총 누계 거리를 기준 : GROUP BY
    • 내림차순 정렬 : ORDER BY
    SELECT ROUTE, 
           CONCAT(ROUND(SUM(D_BETWEEN_DIST),1),'km') AS TOTAL_DISTANCE, 
           CONCAT(ROUND(AVG(D_BETWEEN_DIST),2), 'km') AS AVERAGE_DISTANCE
    FROM SUBWAY_DISTANCE
    GROUP BY ROUTE
    ORDER BY ROUTE DESC;

     

    group by 절을 사용하여, 서버별 게임캐릭터id수(중복값 허용x)와 평균 경험치를 추출해주세요.
    • 서버별 : GROUP BY
    • 게임캐릭터id수(중복값 허용x) : COUNT(DISTINCT)
    • 평균 경험치 : AVG
    select count(distinct game_actor_id) as 게임캐릭터수, avg(exp) as 평균경험치
    from basic.users
    group by serverno;

     

    group by 와 having 절을 사용하여, 일별 게임캐릭터id수(중복값 허용x)를 구하고, 그 값이 10개를 초과하는 경우를 추출
    • 일별 : GROUP BY
    • 게임캐릭터id수(중복값 허용x) : COUNT(DISITNCT)
    • 그 값이 10개를 초과하는 경우  : HAVING > 10
    select date ,count(distinct game_actor_id)게임캐릭터수
    from basic.users
    group by date
    having count(distinct game_actor_id) > 10;

     

    위와 같은 문제를 having 이 아닌 인라인 뷰 subquery를 사용하여, 추출해주세요.
    select 일, 게임캐릭터수
    from (
    	select date as 일 ,count(distinct game_actor_id)게임캐릭터수
    	from basic.users
    	group by date
    ) as 일별게임캐릭터수
    where 게임캐릭터수 > 10;

     

    '[스파르타코딩클럽]데이터분석 과정 > TIL,WIL' 카테고리의 다른 글

    코드카타 / SQL  (0) 2024.04.02
    코드카타 / SQL  (0) 2024.04.01
    코드카타  (1) 2024.03.27
    코드카타 / SQL  (0) 2024.03.26
    코드카타 / SQL / 태블로  (0) 2024.03.25
Designed by Tistory.