본문 바로가기

SQL Kit/SELECT

특정 형질을 가지는 대장균 찾기 [ 프로그래머스 | SQL Kit | Level 1 ]

1. 문제목적

이 문제의 목적은 SQL에서 비트 연산자를 사용하여 특정 조건을 만족하는 데이터를 필터링하고, 필터링된 데이터를 집계하는 방법을 학습하는 것이다. 이 과정에서 아래의 SQL 개념을 학습할 수 있다:

  • 비트 연산자 AND (&): 데이터의 비트 값을 조작하거나 비교하는 방법.
  • OR 조건: 복합적인 조건을 결합하여 데이터를 필터링하는 방법.
  • COUNT 함수: 조건을 만족하는 행의 개수를 집계.
  • WHERE 절: 조건을 기반으로 데이터 필터링.

2. 핵심개념

비트 연산자

SQL에서 비트 연산자는 데이터의 비트를 기반으로 비교를 수행할 때 사용된다.

  • AND 연산자 (&): 두 비트가 모두 1일 때 결과가 1이 된다.
  • GENOTYPE & 2 = 0은 GENOTYPE 값의 두 번째 비트가 0인지 확인한다.
  • GENOTYPE = 4 (100₂)일 때 4 & 2 = 0.
  • GENOTYPE = 3 (011₂)일 때 3 & 2 = 2.

WHERE 절

WHERE 절은 특정 조건에 맞는 데이터를 필터링할 때 사용된다.

SELECT * FROM table_name WHERE condition;

OR 조건

OR은 두 조건 중 하나라도 참이면 결과가 참이 되도록 조건을 결합한다.

WHERE condition1 OR condition2;

COUNT 함수

COUNT는 조건을 만족하는 데이터의 개수를 계산한다.

SELECT COUNT(*) FROM table_name WHERE condition;

3. 문제해결절차

  1. 데이터 분석:
    • GENOTYPE 필드를 사용하여 비트 연산자로 특정 형질을 필터링해야 한다.
    • 2번 형질이 없는 경우를 제외하고, 1번 또는 3번 형질을 가진 데이터를 찾아야 한다.
  2. 조건 정의:
    • GENOTYPE & 2 = 0으로 2번 형질이 없는 데이터를 필터링.
    • (GENOTYPE & 4 = 4 OR GENOTYPE & 1 = 1)으로 1번 또는 3번 형질을 보유한 데이터를 필터링.
  3. 결과 집계:
    • 조건에 맞는 데이터의 개수를 COUNT 함수로 집계.
  4. 쿼리 작성:
    • 비트 연산자와 OR 조건을 결합하여 WHERE 절을 구성.
    • COUNT 함수로 결과 반환.

4. 코드작성

-- 특정 형질을 가지는 대장균 개수를 구하는 SQL 쿼리
SELECT
    COUNT(*) AS COUNT -- 조건을 만족하는 데이터의 개수를 COUNT라는 별칭으로 반환
FROM
    ECOLI_DATA -- 데이터를 조회할 테이블
WHERE
    GENOTYPE & 2 = 0 -- 2번 형질이 없는 데이터를 필터링
    AND (GENOTYPE & 4 = 4 OR GENOTYPE & 1 = 1); -- 1번 또는 3번 형질을 가진 데이터를 필터링

5. 코드분석

1 SELECT 절

  • SELECT COUNT(*): 조건을 만족하는 행의 개수를 계산한다.
  • AS COUNT: 결과 컬럼의 이름을 COUNT로 설정한다.

2 FROM 절

  • FROM ECOLI_DATA: 데이터를 조회할 테이블을 지정한다.

3 WHERE 절

  1. GENOTYPE & 2 = 0:
    • GENOTYPE 값의 비트 중 두 번째 비트(2번 형질)가 0인지 확인.
    • 예를 들어, GENOTYPE = 4 (100₂)일 때 두 번째 비트는 0이므로 조건에 만족.
    • 반면, GENOTYPE = 3 (011₂)일 때 두 번째 비트는 1이므로 조건에 불만족.
  2. (GENOTYPE & 4 = 4 OR GENOTYPE & 1 = 1):
    • GENOTYPE & 4 = 4는 네 번째 비트(4번 형질)가 1인지 확인.
    • GENOTYPE & 1 = 1는 첫 번째 비트(1번 형질)가 1인지 확인.
    • 두 조건 중 하나만 만족하면 결과에 포함.

4 비트 연산자 동작

  • AND 연산자 (&):
  • 두 비트가 모두 1일 때만 결과가 1이 된다.

4 & 2 = 0 (100₂ & 010₂ = 000₂)

4 & 4 = 4 (100₂ & 100₂ = 100₂)

5 COUNT 함수

  • 필터링된 데이터의 개수를 반환한다.