[제로베이스 데이터 분석 취업 스쿨]Day24 SQL 분석8

Chapter 4. HR 데이터를 통한 채용 기획하기 

Adhoc Analysis란?

  • 특정 질문에 대한 답이나 특정 문제 해결을 위해 예정에 없던, 일회성으로 수행되는 데이터 분석이다.
  • 사전에 계획되거나 정기적으로 수행되는 분석과는 달리, 필요에 따라 즉석에서 수행된다.

 

사용해볼 Tool

Dbeaver 자주 쓰는 단축키

TABLE CREATE

  • 기존 존재하는 원천 테이블로부터 새로운 2개의 Mini Table 생성 
  • 먼저 STRING Type을 담고있는 칼럼을 모은 테이블부터 생성 
  • STRING을 담고 있는 테이블을 VARCHAR가 아닌 VARBINARY로 바꿔준다.

 

VARCHAR vs VARBINARY

VARCHAR

  • 문자 데이터 유형: VARCHAR는 가변 길이의 문자 데이터를 저장하기 위해 사용됩니다. 이 데이터 형식은 알파벳, 숫자, 기타 문자(공백 포함)를 저장하는 데 적합합니다.
  • 문자 집합 인코딩: 저장되는 데이터는 데이터베이스의 문자 집합 설정에 따라 인코딩됩니다. 예를 들어, UTF-8, Latin1 등 다양한 문자 인코딩을 지원할 수 있습니다.
  • 가변 길이: VARCHAR는 지정된 최대 길이까지 문자열 데이터를 저장할 수 있으며, 실제로 사용하는 데이터 길이에 따라 저장 공간을 조정합니다.

VARBINARY

  • 바이너리 데이터 유형: VARBINARY는 가변 길이의 바이너리 데이터(예: 이미지, 파일, 이진 데이터 등)를 저장하기 위해 사용됩니다.
  • 인코딩 없음: 바이너리 데이터는 인코딩되지 않고 원시 형태 그대로 저장됩니다. 이는 VARBINARY가 문자 집합이나 인코딩에 영향을 받지 않는다는 것을 의미합니다.
  • 가변 길이: VARBINARY도 지정된 최대 길이까지 바이너리 데이터를 저장할 수 있으며, 실제로 사용하는 데이터 길이에 따라 저장 공간을 조정합니다.

주요 차이점

  • 데이터 유형: VARCHAR는 문자 데이터를 위한 것이며, VARBINARY는 바이너리 데이터를 위한 것입니다.
  • 인코딩: VARCHAR 데이터는 문자 인코딩에 영향을 받지만, VARBINARY 데이터는 인코딩 없이 원시 형태로 저장됩니다.
  • 용도: VARCHAR는 주로 텍스트 데이터를 저장하는 데 사용되며, VARBINARY는 이미지, 오디오 파일, 또는 다른 이진 형식의 데이터를 저장하는 데 사용됩니다.

이러한 차이점으로 인해, VARBINARY를 사용하면 OS 셋팅 없이 대소문자 구분하여 데이터를 기입할 수 있다. 

 

DATA INSERT

HR 데이터를 두 개의 테이블(문자열 타입과 숫자 타입)로 나누어서 담는다.

SQL 쿼리문 Tips

  1. SELECT: 데이터를 선택할 열(컬럼)을 지정합니다. 계산이 필요한 경우, 이 부분에서 함수를 사용하거나 새로운 데이터 형태를 만들 수 있습니다.
  2. FROM: 데이터를 가져올 테이블을 지정합니다. 여러 테이블에서 데이터를 가져오는 경우, 이 부분에서 JOIN을 사용하여 테이블을 결합합니다.
  3. WHERE: 특정 조건에 맞는 데이터만 필터링합니다. 이 조건은 FROM 절에서 지정한 테이블의 데이터에 적용됩니다.
  4. GROUP BY: 선택한 데이터를 특정 열의 값에 따라 그룹화합니다. 주로 집계 함수(AVG, SUM, COUNT 등)와 함께 사용됩니다.
  5. HAVING: GROUP BY로 생성된 그룹에 조건을 적용하여 필터링합니다. WHERE 절과 비슷하지만, 그룹화된 결과에 대해 조건을 적용할 때 사용됩니다.
  6. ORDER BY: 결과 데이터를 특정 열의 값에 따라 정렬합니다. 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 수 있습니다.
  7. LIMIT: 반환되는 데이터의 수를 제한합니다. 특히 대용량 데이터를 다룰 때 유용하며, 테스트 쿼리를 작성할 때도 자주 사용됩니다.

 

Limit & Having

Limit을 지정하여서 검색에서 몇 개를 산출 할지 정할 수 있다.

order by로 정렬하여  순위가 높은 Top5을 구할 수도 있다. 

SELECT Department, EducationField, count(*) AS hc
FROM hr.hr_cate hc
LEFT JOIN hr.hr_number hn
ON hc.EmployeeNumber = hn.EmployeeNumber
GROUP BY 1, 2
ORDER BY 3 DESC
LIMIT 5

 

Having은 Group by의 조건에서 사용된다. 

Q. 동일한 Department에 EducationField를 가진 사람들끼리 그룹군을 나눈다고 합니다. 한 그룹군(hc)에 30명 이하인 그룹군만 보여주세요.

SELECT Department, EducationField, count(*) AS hc
FROM hr.hr_cate hc
LEFT JOIN hr.hr_number hn
ON hc.EmployeeNumber = hn.EmployeeNumber
GROUP BY 1, 2
HAVING hc <= 30