[데이터 분석 부트캠프] 데이터 분석가 필수 Tool SQL (4)

2023. 8. 1. 18:30IT 라이프/패캠 데이터분석 부트캠프 9기

반응형

1. 실습

처음 접하는 DB, 테이블의 info 파악하기

  • 컬럼 구성 확인 : LIMIT 사용
  • 테이블의 행 갯수 확인
    • COUNT(*) : 행의 수. COUNT(ID)와 결과는 동일하지만 '행'을 알고 싶다면 * 쓰는게 의미적으로 맞음
    • https://benant.wordpress.com/2010/07/25/sql에서-count-결과에-null이-포함될까/ 
      • COUNT(*) : null 포함
      • COUNT(컬럼명) : null 제외, 빈 문자열은 포함
        • 빈 문자열도 제외하려면 빈 문자열 → null 후에 COUNT하면 됨
          • ex) COUNT(IF (컬럼명='', null, 컬럼명))
      • COUNT(DISTINCT 컬럼명) : null 제외, 중복 제외
  • 범주형 데이터의 카테고리가 뭐가 있는지 확인하고 싶을 때 DISTINCT 사용
  • 컬럼값이 중복될 수 있을 거 같다고 생각하면 DISTINCT 사용

⌘ 에러 떠서 구글링하며 알게 된 부분

/*
다음처럼 작성했더니 에러났음
코드:
SELECT Name FROM city
WHERE Population = MIN(Population);

에러:
Error Code: 1111. Invalid use of group function

구글링: mysql where절 max invalid group function
답: https://yeonyeon.tistory.com/244
에러원인: 그룹함수(컬럼값들을 특정 기준으로 그룹화하고, 그룹별로 결과를 반환하는 함수)가 허용되지 않는 위치에서 그룹함수 사용
WHERE, GROUP BY절 등에서 그룹함수를 사용하면 에러가 발생한다고 함
해결방법: 그룹함수를 사용 가능한 위치에서 사용(서브쿼리 이용)
*/

SELECT Name FROM city
WHERE Population = (SELECT MIN(Population) FROM city);

 

⌘ 놓친 부분

  • 값만 보면 그게 뭔지 알 수 없으니 보통 GROUP BY한 컬럼과 함께 출력
#SELECT MAX(Population)
SELECT CountryCode, MAX(Population)
FROM city
GROUP BY CountryCode;
  • 출력 순서를 바꿔주는 게 더 자연스러움
#SELECT SUM(Population), CountryCode
SELECT CountryCode, SUM(Population)
FROM city
GROUP BY CountryCode

 

정리

COUNT()의 인자에 따라 null 포함여부가 다르다는 사실을 구글링을 통해 알게 되었다.

이 부분에 대한 정확한 답변이 안된 것 같아서 구글링을 하게 된 것인데 역시 공부는 스스로 하는 거란 생각이 든다...

 
728x90
반응형