Notice
Recent Posts
Recent Comments
Link
관리 메뉴

데브마우스

[SQL] SELECT와 GROUP BY, HAVING 정리 본문

데이터베이스/SQL: 정리

[SQL] SELECT와 GROUP BY, HAVING 정리

데브마우스 2024. 1. 2. 17:08

GROUP BY 절

GROUP BY절은 SELECT와 함께 사용할 때 그룹으로 묶어주는 기능을 제공합니다.

GROUP BY절은 그룹으로 묶어주지만 명확한 기준이 없으면 그룹으로 묶어버렸기에 값을 찾기 힘들 수 있습니다. SQL문을 명확하게 사용하셔야 합니다.

 

GROUP BY의 위치는 아래와 같습니다.

SELECT 열_이름

    FROM 테이블_이름

    WHERE 조건식

    GROUP BY 열_이름

    HAVING 조건식

    ORDER BY 열_이름

    LIMIT 숫자

GROUP BY절의 집계 함수

집계 함수 설명
SUM() 합계를 구합니다.
AVG() 평균을 구합니다.
"행의 총합/행의 갯수"을 계산한 값을 출력합니다.
실수를 출력시키기에 JSP의 ResultSet과 함께 사용한다면 ResultSet.getFloat("열이름")메서드를 사용하셔야 합니다.
MIN() 최소값을 구합니다.
MAX() 최대값을 구합니다.
COUNT() 행의 개수를 셉니다.
COUNT(DISTINCT) 행의 개수를 셉니다.(중복은 1개만 인정합니다.)

 

COUNT절 정리

-- member 테이블에는 행(레코드)이 10개 있습니다.
SELECT count(NULL) from member; -- 출력값 0, 컬럼의 이름 count(NULL)
SELECT count(1) from member; -- 출력값 10
SELECT count(0) from member; -- 출력값 10
SELECT count("String") from member; -- 출력값 10, 컬럼의 이름 count("String")

COUNT()절은 행의 값이 없는, 행의 값이 NULL인 행을 세지 않습니다. 이를 이용하여 특정 테이블에서 특정 행에 데이터가 있는 개수를 구할 수 있습니다. 

HAVING 절

HAVING 절은 WHERE절과 같은 기능을 제공합니다. 하지만 GROUP BY 절을 사용할 때 WHERE 절과 함께 사용할 수 없기에 HAVING 절을 사용합니다.

아래는 HAVING 절을 사용한 예제 코드입니다.

SELECT mem_id, SUM(price*amount) FROM buy GROUP BY mem_id HAVING SUM(price*amount) > 1000;
SELECT mem_id "회원 아이디", SUM(price * amount) "총 구매 금액" FROM buy GROUP BY mem_id HAVING SUM(price*amount) > 1000 order by sum(price*amount) desc;