목록Algorithm/프로그래머스 (8)
Hanbit the Developer
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS 날짜 FROM ANIMAL_INS DATE_FORMAT()을 통해 형 변환을 해줍니다.
SELECT INS.ANIMAL_ID, INS.NAME FROM ANIMAL_INS INS, ANIMAL_OUTS OUTS WHERE OUTS.ANIMAL_ID = INS.ANIMAL_ID ORDER BY OUTS.DATETIME - INS.DATETIME DESC LIMIT 2 ORDER BY 구문이 핵심입니다. 보호 기간이 길었을수록 (OUTS.DATETIME - INS.DATETIME)이 커지므로 DESC를 통해 내림차순으로 정렬해줍니다.
SELECT ANIMAL_ID, NAME, CASE WHEN SEX_UPON_INTAKE LIKE "%Neutered%" OR SEX_UPON_INTAKE LIKE "%Spayed%" THEN "O" ELSE "X" END AS "중성화" FROM ANIMAL_INS CASE - WHEN - ELSE - END로 경우에 따라 "O"와 "X"로 나눈 뒤, AS를 통해 "중성화"라는 컬럼으로 조회하도록 해줍니다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NAME like '%el%' AND ANIMAL_TYPE='Dog' ORDER BY NAME WHERE절이 핵심입니다. %는 글자수와 상관 없는 조건이며, -는 글자수의 영향을 받습니다. 가령 'Cellular'이라는 문자열을 두고 고려해보았을 때, '%el%'는 불러오겠지만, '-el-'은 불러오지 않습니다. '-el-----'을 쓸 경우에는 조회합니다.
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty') ORDER BY ANIMAL_ID 설명이 필요하지 않다고 생각합니다.
SELECT OUTS.ANIMAL_ID, OUTS.ANIMAL_TYPE, OUTS.NAME FROM ANIMAL_OUTS OUTS LEFT JOIN ANIMAL_INS INS ON INS.ANIMAL_ID = OUTS.ANIMAL_ID WHERE INS.SEX_UPON_INTAKE LIKE 'Intact%' AND (OUTS.SEX_UPON_OUTCOME LIKE 'Spayed%' OR OUTS.SEX_UPON_OUTCOME LIKE 'Neutered%') ORDER BY OUTS.ANIMAL_ID WHERE절이 핵심입니다. WHERE INS.SEX_UPON_INTAKE LIKE 'Intact%' => "들어올 당시에는 중성화되지 않았지만" AND (OUTS.SEX_UPON_OUTCOME LIKE 'Sp..
SELECT INS.NAME, INS.DATETIME FROM ANIMAL_INS INS LEFT OUTER JOIN ANIMAL_OUTS OUTS ON INS.ANIMAL_ID = OUTS.ANIMAL_ID WHERE OUTS.ANIMAL_ID is null ORDER BY INS.DATETIME LIMIT 3 WHERE절, LEFT OUTER JOIN절이 핵심입니다. 입양을 가지 못했다는 것은, ANIMAL_INS에는 있되 ANIMAL_OUTS에는 없다는 것을 의미하지요. 따라서 OUTER을 써주고, 그 뒤에 WHERE에서 is null을 통해 그것을 구분해주는 것입니다.