2023. 3. 13. 14:02ㆍSQLD 정리
위에 테이블에서 성별에 따른 회원수를 count하려고 한다. 이때 group by를 사용해서 count 할 수 있다.
SELECT 성별, COUNT(회원코드)
FROM MEMEBER_INFO
GROUP BY 성별
위의 테이블에서 성별로 GROUP BY해서 출력을 하면 오라클인 경우 다음과 같이 출력이 된다.
출력된 결과를 보면 성별이 NULL인것도 COUNT를 해줬다. 반대로 SQL서버에서는 NULL을 COUNT 안해주고 성별 F, M에 대해서만 COUNT를 해준다. 만약에 SQL 서버에서 NULL을 포함해서 COUNT를 하고 싶다면 NULL을 NVL을 통해서 NULL값을 대체 해주면 된다.
SELECT NVL(성별, 'N') AS gender, COUNT(회원코드) cnt
FROM MEMEBER_INFO
GROUP BY NVL(성별, 'N')
여기서 주의할 점은 GROUP BY 절에 gender와 같은 allias를 사용할 수 없고 SELECT에 NVL이라는 함수를 적용하고 있으면 GROUP BY 에서도 똑같이 NVL(성별, 'N')로 입력해야 한다.
위에 출력된 결과와 같이 오라클에서는 성별이 null이여도 1로 출력을 해줬다. 저기서 성별로 COUNT했을 때 1인값을 제외하고 출력하려면 어떻게 할까?
이때는 HAVING을 사용하면 된다.
SELECT 성별, COUNT(회원코드)
FROM MEMEBER_INFO
GROUP BY 성별
HAVING COUNT(회원코드) != 1
이렇게 집계된 결과에 대해서 조건을 달아줄때 HAVING을 사용하고 GORUP BY 다음에 작성해주면 된다.
'SQLD 정리' 카테고리의 다른 글
SQL - JOIN 조인 (0) | 2023.03.13 |
---|---|
SQL - 집계함수, SELECT문 연산 순서, 행 수 제한, ROWID (0) | 2023.03.13 |
SQL - NULL 관련 함수 (0) | 2023.03.12 |
SQL - WHERE 절에 들어가는 연산자 (0) | 2023.03.10 |
SQL - DECODE, CASE WHEN (0) | 2023.03.10 |