[SQL] select, group by, count 사용하기

2024. 10. 31. 22:59·Data Enginnering/Database

오늘 푼 문제

      • [Lv.4 / 프로그래머스 / SQL] 서울에 위치한 식당 목록 출력하기
      • [Lv.4 / 프로그래머스 / SQL] 대장균들의 자식의 수 구하기
-- 코드를 입력하세요
SELECT 
    I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, 
    ROUND(AVG(R.REVIEW_SCORE),2) AS AVG_SCORE
FROM 
    REST_INFO AS I
JOIN 
    REST_REVIEW AS R
ON 
    I.REST_ID = R.REST_ID
WHERE
    I.ADDRESS LIKE '서울특%'
GROUP BY 
    I.REST_ID
ORDER BY
    AVG_SCORE DESC, FAVORITES DESC

 

-- 코드를 작성해주세요
SELECT
    A.ID, 
    COALESCE(B.COUNT, 0) AS CHILD_COUNT
FROM ECOLI_DATA AS A
    LEFT JOIN (
        SELECT PARENT_ID, COUNT(*) AS COUNT
        FROM ECOLI_DATA
        GROUP BY 1
        HAVING 1 IS NOT NULL
    ) AS B
    ON A.ID = B.PARENT_ID
ORDER BY
    ID;

 


 

1. 코딩 테스트를 위한 SQL 문법

적는 순서
SELECT - DISTINCT -FROM - JOIN - ON - WHERE - GROUP BY - HAVING - ORDER BY - LIMIT - OFFSET

  • SELECT: 조회할 열(column)을 지정합니다.
  • DISTINCT: 중복된 결과를 제거합니다 (선택적).
  • FROM: 데이터를 가져올 테이블을 지정합니다.
  • JOIN: 다른 테이블과의 조인을 정의합니다.
  • ON: 조인의 조건을 정의합니다.
  • WHERE: 특정 조건에 맞는 레코드를 필터링합니다.
  • GROUP BY: 결과를 특정 열로 그룹화합니다.
  • HAVING: GROUP BY로 그룹화된 결과에 추가적인 필터링을 적용합니다.
  • ORDER BY: 결과를 특정 열을 기준으로 정렬합니다.
  • LIMIT: 반환할 레코드의 수를 제한합니다.
  • OFFSET: 반환할 레코드의 시작점을 지정합니다. (페이지네이션)

2. GROUP BY

GROUP BY + 여러 개의 열

SELECT
 EXTRACT(year FROM date) AS year,
 EXTRACT(month FROM date) AS year,
 ROUND(AVG(price), 2) AS avg_price
FROM visit
GROUP BY 
 EXTRACT(year FROM date),
 EXTRACT(month FROM date);

- GROUP BY 뒤에 열 이름을 직접 다 적는 대신 열의 위치로 대신하여 적을 수 있습니다.

SELECT
 EXTRACT(year FROM date) AS year,
 EXTRACT(month FROM date) AS month,
 ROUND(AVG(price), 2) AS avg_price
FROM visit
GROUP BY 1, 2;

GROUP BY, HAVING 그리고 WHERE 까지 같이 사용

SELECT
 date,
 ROUND(AVG(duration), 2) AS avg_duration
FROM visit
WHERE duration > 5
GROUP BY date
HAVING COUNT(*) > 3
ORDER BY date;

 

3. 기타 꿀팁들

Column에서 NULL이 나타나면 어떻게 처리할 것인가?
1. WHERE 절에서 NULL 제외
NULL 값을 제외하려면 WHERE 절에 조건을 추가합니다.

WHERE TLNO IS NOT NUL

2. NULL을 특정 값으로 대체 (COALESCE)
COALESCE 함수를 사용하여 NULL 값을 특정 값으로 대체할 수 있습니다.

SELECT COALESCE(TLNO, 'N/A') AS TLNO, MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH

3. CASE 문으로 처리
CASE 문을 사용하여 NULL값을 특별히 처리할 수 있습니다.

SELECT
    CASE
        WHEN TLNO IS NULL THEN 'N/A'
        ELSE TLNO
    END AS TLNO,
    MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH
FROM MEMBER_PROFILE

데이터의 갯수를 세야한다면 COUNT로(단, SELECT에서만 사용 가능)

SELECT
    COUNT(USER_ID) AS USERS

문자열 데이터 중 특정 값을 찾아야 한다면 %로

WHERE
    ADDRESS LIKE '경기도%'

MAX, MIN은 SELECT에서만 사용할 수 있다. 그래서 이런 코드가 나온다.

WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);

 

 

 

 

 

Thanks to 나의 블로그 선생님들

https://velog.io/@cji3604/SQL-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8C%80%EB%B9%84-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC

 

SQL 코딩테스트 대비 문법 정리

SQL에 대해 공부

velog.io

https://kimsyoung.tistory.com/entry/SQL-GROUP-BY-%E4%B8%8A-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%8B%A4%EC%A0%9C-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95

 

https://blog.naver.com/kjk_lokr/221799799535

 

 

'Data Enginnering > Database' 카테고리의 다른 글

[NoSQL] K-V / Document / Column / Graph Databases  (0) 2024.11.19
[SQL] Nested Query, Join, Aggregate, Group, Order  (1) 2024.11.15
[SQL] Data Retrieval in SQL / JOIN vs WHERE / Table as Sets  (1) 2024.11.08
[SQL] Integrity Constraint, DDL vs DML  (0) 2024.11.07
[Data] DuckDB, Data Warehouse 종류, Data 관리를 위한 필수요소  (1) 2024.11.06
'Data Enginnering/Database' 카테고리의 다른 글
  • [SQL] Nested Query, Join, Aggregate, Group, Order
  • [SQL] Data Retrieval in SQL / JOIN vs WHERE / Table as Sets
  • [SQL] Integrity Constraint, DDL vs DML
  • [Data] DuckDB, Data Warehouse 종류, Data 관리를 위한 필수요소
Ctrl_engineer
Ctrl_engineer
Ctrl 키는 혼자일 때보다 다른 키와 함께할 때 진짜 힘을 발휘합니다. 데이터도, 사람도 마찬가지입니다. 연결되고 흐를 때, 세상은 더 나은 방향으로 움직입니다. 저는 데이터의 흐름을 설계하고, 신뢰를 심는 엔지니어가 되고자 합니다. 이곳은, 그 여정의 작은 흔적들을 기록하는 공간입니다.
  • Ctrl_engineer
    Ctrl the flow
    Ctrl_engineer
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • Research (9)
        • Raspberry Pi (9)
      • Data Enginnering (24)
        • Cloud (3)
        • Elastic (6)
        • Database (9)
        • Pipeline (3)
      • CS STUDY (0)
        • Computer Science (0)
        • DataStructure & Algorithm (0)
      • Programming (13)
        • Python (13)
      • Mathematics and Statistics (10)
      • Data Science (3)
        • Data Insight (2)
        • Learning (0)
        • ML & DL (0)
      • DIARY (0)
      • TIL (Today I Learned) (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    py4e
    climb-mates
    오블완
    Statistics and Probability
    티스토리챌린지
    SQL
    부스트코스
    Khan Academy
    ssh 비밀번호 없이 접속
    heap size
    점프투파이썬
    3blue1brown
    proxyjump 설정
    linear algebra
    shellyplugs
    spark
    라즈베리파이 네트워크 설정
    Khan
    라즈베리파이5
    elasticSearch
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Ctrl_engineer
[SQL] select, group by, count 사용하기
상단으로

티스토리툴바