[프로그래머스] MYSQL LEVEL1 1문제 (28) (실패)

Hyeon·2024년 9월 9일

SQL 문제 풀이

목록 보기
6/61

🚩오늘의 문제는?

SQL - level 1

1.특정 형질을 가지는 대장균 찾기

1.문제 설명


2.문제 풀이

STEP1: 10진수의 값을 2진수로 변환하기

SELECT CONV(GENOTYPE,10,2)
FROM ECOLI_DATA ;

STEP2: 2진수의 값을 가지고 보유한 형질로 변환하기

  • 문자열로 변환하기
  • 글자 자르기
    SUBSTRING(NEW_COMN,2,4) // NEW_COMN의 2번째 글자부터 4글자 출력
SELECT ID,
SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),1,1) AS GEN_1,
SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),2,1) AS GEN_2,
SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),3,1) AS GEN_3,
SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),4,1) AS GEN_4
FROM ECOLI_DATA ;

STEP3 : 조건을 사용하여 2번 형질이 보유하지 않으면서

1번이나 3번 형질을 보유하고 있는 대장균 개체의 수(COUNT)를 출력하기

(프로그래머스는 하나의 코드로 문장을 완성시켜야함.
SELECT가 아니라 CASE WHEN을 이용해서 값을 출력하도록 하자)

시도1

SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE (
SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),1,1) = 1 OR
SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),3,1) = 1) AND
(SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),2,1) != 1);

시도2

비트 연산 없이 구하기, 어느부분에서 틀린건지 모르겠음

SELECT COUNT(ID) AS COUNT
FROM ECOLI_DATA
WHERE 
(SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),1,1) = 1 OR
SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),3,1) = 1) AND
(SUBSTRING(CONVERT(ROUND(CONV(GENOTYPE,10,2)),CHAR),2,1) =0);

0개의 댓글