Growth Hoon

20231021_TIL_SQL 스터디 {sum과 count의 차이, group by안하고 집계 함수 사용시 문제점, 또 뭐 하나 있었음.} 본문

TIL_Today I Learned

20231021_TIL_SQL 스터디 {sum과 count의 차이, group by안하고 집계 함수 사용시 문제점, 또 뭐 하나 있었음.}

sayhoon 2023. 10. 21. 23:07

오늘은 JP study에서 내가 튜터링을 열었던 SQL을 끝내기 위해 서울시청점에 방문했다.

승인님이랑 함께 sql문제를 풀고, 그동안 내가 sql문제를 풀었던 방법을 공유했고

그 결과로 승인님도 프로그래머스 sql문제랑 solvesql level3의 문제는 풀 수 있는 실력이 되었다 !

 

오늘은 그 과정에서 발생한 의문과 주의점에 대해서 TIL을 작성하고자 한다

 

1. UNION 할 때, 위에서 작성한 SLECT문의 Table Column명을 따르는지?

프로그래머스 문제에서 UNION을 사용한 문제인데 위의 Column명과 아래의 Column명이 다른데, 위의 Column명을 따르더라

Python의 pandas 라이브러리 merge함수에서 left의 컬럼이 먼저 적용되 듯이 

Mysql에서도 위의 table이 주 table로 적용되고 따르는 것 같아 보였다.

 

2. SELECT문에서 SUM() 과 COUNT()의 차이

-- 조건문에 참이면 1, False이면 0이 된다.
SELECT
  COUNT(Col > 1) AS 별칭 1,
  COUNT(Col < 1) AS 별칭 2,
FROM
  tb1
GROUP BY
  컬럼명

위 쿼리문에서 COUNT함수를 사용했는데 조건에 맞지 않는 레코드(행)은 세지 않을 것 같았는데 count 하더라 !..

여기서 승인님은 SUM()함수를 사용했기 때문에 조건에 True, False값이 0,1이어서 정확하게 구분이되어 처리 되었음!

 

해당 문제에 대해서 찾아본 COUNT를 통해서 쿼리문 작성방법

-- 조건문에 참이면 1, False이면 0이 된다.
SELECT
  COUNT(CASE WHEN Col > 1 THEN 1 ELSE NULL) AS 별칭 1,
  COUNT(CASE WHEN Col < 1 THEN 1 ELSE NULL) AS 별칭 2,
FROM
  tb1
GROUP BY
  컬럼명

COUNT함수 내부에 CASE조건문을 넣어주고, False일 때 NULL값을 넣게 만들어 count하지 않는 방법이다.

 

reference site

1. count(), sum()의 차이점과 수세는 방법 찾아본 블로그