[JOIN] 보호소에서 중성화한 동물
·
SQL/programmers
1. 문제 설명 보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화 되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요. 2. 문제 풀이 해당 문제는 서브쿼리를 써야 할 것 같다는 생각이 들었습니다. 1. 보호소에 들어올 당시에는 중성화 되어 있지 않았지만, 보호소를 나갈 당시에는 중성화 된 => 해당 결과를 찾기 위해서는 INS와 OUTS 테이블을 LEFT JOIN 해야합니다. 2. 보호소에 들어올 당시에는 중성화가 되지 않은=> 해당 데이터를 찾기 위해서 INS 테이블 SEX_UPON_INTAKE 컬럼에 있는 데이터 중 'INTACT%' 를 포함하는 데이터를 찾아줍니다.=>..
[JOIN] 오랜 기간 보호한 동물(1)
·
SQL/programmers
1. 문제 설명 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다. 2. 문제 풀이 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물을 찾기 위해서는 ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 LEFT JOIN 해야 한다. 그 다음, 입양을 못 간 동물을 찾아야 하기 때문에 ANIMAL_OUTS 테이블에 있는 NULL값을 찾기 위해서 WHRE절을 이용해 조건을 추가한다. 오래 보호소에 있었던 동물을 찾기 위해서는 INS.DATETIME을 ASC로 정렬하고 3마리의 동물을 찾기 위해서 LIMIT 3을 걸어준다. (MYSQL 기준) 3. 정답 SELECT ..
[JOIN] 있었는데요 없었습니다
·
SQL/programmers
1. 문제 설명 2. 풀이 과정 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름 (관리자의 실수!) => INS와 OUTS 테이블이 JOIN 되어야 함 => 보호 시작일(INS.DATETIME)보다 입양일(OUTS.DATETIME)이 더 빠른 동물을 찾아야 하기 때문에 WHERE절에 조건을 걸어주자. 결과는 보호 시작일이 빠른 순으로 조회 => ORDER BY INS.DATETIME 3. 정답 SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID WHERE A.DATETIME > B.DATETIME ORDER BY A.DATETIME;
[JOIN] 없어진 기록 찾기
·
SQL/programmers
1 문제 설명 2. 문제 예시 3. 풀이 과정 입양을 간 기록은 있는데(ANIMAL_OUTS) 입양을 온 기록은 없는(ANIMAL_INS) 동물의 ID와 이름 => ANIMAL_OUTS를 기준으로 ANIMAL_INS 테이블을 LEFT JOIN 한다 => LEFT JOIN하게 될 경우, 왼쪽에 오는 테이블을 기준으로 오른쪽에 오는 테이블과 비교하여 조건에 맞는 값이 있으면 JOIN하여 가져오고, 값이 없으면 NULL 값을 표시한다. => 입양 온 기록이 없는 동물의 ID와 이름을 찾아달라고 했으니, INS.ANIMAL_ID가 NULL인 값을 WHERE절을 활용 해 조건을 걸어주자 => ID 순으로 정렬하라 했으니 ORDER BY ANIMAL_ID 4. 정답 SELECT A.ANIMAL_ID, A.NAME ..
[GROUP BY] 입양 시각 구하기(2)
·
SQL/programmers
문제설명 풀이과정 입양 시각 구하기(1)처럼 쿼리를 짜면 0~6시 까지의 결과가 출력되지 않는 문제가 발생한다. 이런 경우, 0~6시 까지의 데이터를 따로 생성해야 하기 때문에 SET(로컬변수) 명령어를 사용해서 문제를 풀어나가야 한다. SET? SQL SET W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more. www.w3schools.com 정답 SET @HOUR = -1; --변수 선언 SELECT (@..
[GROUP BY] 입양 시각 구하기(1)
·
SQL/programmers
문제 설명과 예시 풀이 과정 각 시간대별로 입양이 몇 건이나 발생 => (각 시간대별) GROUP BY로 시간대 그룹 => (몇 건) 고유값인 ANIMAL_ID를 COUNT하기 09:00 부터 19:59 까지 => where로 시간 조건을 걸어야 함 => 부터~까지니까 between 사용하면 될 것 같음 (and도 사용 가능) 시간대 순으로 정렬 => ORDER BY 정답 MYSQL/AND SELECT HOUR(DATETIME) AS HOUR, COUNT(ANIMAL_ID) AS COUNT FROM ANIMAL_OUTS WHERE HOUR(DATETIME) >8 AND HOUR(DATETIME) < 20 GROUP BY HOUR(DATETIME) ORDER BY 1; ORACLE/BETWEEN SELEC..
[GROUP BY] 동명 동물 수 찾기
·
SQL/programmers
문제 설명 풀이 과정 해당 이름이 쓰인 횟수를 조회한다 => GROUP BY를 통해 이름을 그룹화 한 다음 COUNT 해야한다 두 번 이상 쓰인 이름 => 그룹 함수로 검색 조건을 작성할 때는 WHERE 절을 사용할 수 없어 HAVING절을 사용해야 한다. 이름 없는 동물은 집계에서 제외 => IS NOT NULL을 통해 집계에서 제외시키기 => 하지만 COUNT(name) 과정에서 자동으로 NULL을 제외시킴. 결과는 이름 순으로 조회 => ORDER BY 정답 SELECT name, COUNT(name) AS COUNT FROM animal_ins GROUP BY name HAVING COUNT(name) >=2 ORDER BY name; -- 만약 NOT NULL 조건을 넣었더라면 SELECT na..
[GROUP BY]고양이와 개는 몇 마리 있을까?
·
SQL/programmers
문제 설명 문제 풀이 과정 고양이와 개가 각각 몇 마리인지 조회 => GROUP BY로 그룹을 묶기 => 몇 마리인지 조회하기 위해 고유값인 ANIMAL_ID를 COUNT하기 고양이를 개보다 먼저 조회 => ORDER BY 정답 SELECT animal_type, COUNT(animal_id) FROM animal_ins GROUP BY animal_type ORDER BY animal_type