전체 글77 프로그래머스 JOIN (4) - 보호소에서 중성화한 동물 들어올 때는 중성화가 안되어있지만, 나갈때는 중성화가 되어있는 동물을 구해야 한다. 1) INNER JOIN을 이용해 ANIMAL_INS와 ANIMAL_OUTS의 모든 동물을 구한다. SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID 2) 이때 조건을 걸어 들어올때는 중성화가 되어있지 않는(Intact~), 나갈 때는 중성화가 되어있는(Spayed~, Neutered~) 동물을 찾는다. * 문자열이 포함되어있는 데이터 구하기 : LIKE SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME FROM ANIMAL_INS I INNER.. 2022. 4. 3. 프로그래머스 JOIN (3) - 오랜 기간 보호한 동물(1) 입양을 가지 못한 동물 중 가장 오래 보호소에 있었던 동물 3마리를 구해야 한다. 조건을 하나씩 살펴보면.. 1) 입양을 가지 못한 동물을 구한다. 즉, ANIMAL_INS에는 있지만 ANIMAL_OUTS에는 없는 동물을 구해야 한다. SELECT I.NAME, I.DATETIME FROM ANIMAL_INS I LEFT OUTER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE O.ANIMAL_ID IS NULL -- ANIMAL_OUTS에는 없는(NULL) 동물 2) 가장 오래 보호소에 있었던 동물 3마리, 즉 보호 시작일이 빠른 동물 3마리를 구해야 한다. 따라서, 보호 시작일로 정렬을 한다. SELECT I.NAME, I.DATETIME FROM A.. 2022. 4. 3. 프로그래머스 JOIN (2) - 있었는데요 없었습니다 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 구해야 한다. 즉, ANIMAL_INS의 DATETIME > ANIMAL_OUTS의 DATETIME 인 데이터를 구해야 한다. 1) 두 테이블을 조인 해야한다. 이 때, OUTERJOIN과 INNERJOIN 두 가지 방법이 가능하다. -- INNER JOIN SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID -- OUTER JOIN SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I LEFT OUTER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHER.. 2022. 4. 3. 프로그래머스 JOIN (1) - 없어진 기록 찾기 ANIMAL_OUTS에는 있지만, ANIMAL_INS에는 없는 데이터를 찾아야 한다. 1) JOIN을 통해 ANIMAL_OUTS의 데이터를 모두 찾아본다. (PK인 ANIMAL_ID로 조인을 한다) SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL_OUTS O LEFT OUTER JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID; => 이렇게 하면, ANIMAL_OUTS의 데이터가 모두 출력된다. (ANIMAL_IN에 없는 ANIMAL_ID 포함) 2) ANIMAL_INS에 존재하지 않는 데이터를 구해야 하므로, 조건을 걸어 ANIMAL_INS의 데이터가 NULL 인 경우를 찾는다. SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL.. 2022. 4. 3. JOIN 기초 개념 및 예제 JOIN이란? 둘 이상의 테이블을 연결해서 데이터 검색하고싶을 때 사용. ' INNER JOIN : 교집합 LEFT/RIGHT JOIN : 부분집합 OUTER JOIN: 합집합 ' 이라고 생각하면 쉽다. 1) INNER JOIN SELECT * FROM A INNER JOIN B ON A.ID = B.ID; => A의 ID와 B의 ID가 동일한 모든 데이터 SELECT (A + B) 2) LEFT JOIN / RIGHT JOIN SELECT * FROM A LEFT OUTER JOIN B ON A.ID = B.ID; => A의 데이터 모두 SELECT (A); 비어있는 부분은 NULL. SELECT * FROM A LEFT OUTER JOIN B ON A.ID = B.ID WHERE B.ID IS NUL.. 2022. 4. 3. 프로그래머스 GROUP BY (3) - 입양 시각 구하기(1) DATETIME 타입의 DATETIME의 시간(HOUR)을 구하기 위해서 HOUR() 함수를 사용하면 된다. 1) 각 시간대별로 건수 조회를 해야하므로 시간대별로 그룹화를 진행한다. SELECT HOUR(DATETIME) HOUR, COUNT(ANIMAL_ID) FROM ANIMAL_OUTS GROUP BY HOUR 2) 각 그룹에 대한 조건이, 9시부터 19:59 사이라고 명시되어있다. 따라서 조건 추가. -- HAVING 사용 SELECT HOUR(DATETIME) HOUR, COUNT(ANIMAL_ID) FROM ANIMAL_OUTS GROUP BY HOUR HAVING (HOUR >= 9 AND HOUR < 20) -- WHERE 사용 SELECT HOUR(DATETIME) HOUR, COUNT(.. 2022. 4. 2. 프로그래머스 GROUP BY (2) - 동명 동물 수 찾기 HAVING : GROUP BY로 묶여진 그룹 중, 조건에 맞는 그룹을 추출한다. WHERE : 테이블에서 조건에 맞는 데이터를 추출한다. 1) 두번 이상 쓰인 이름을 구하기 위해 우선 NAME으로 그룹화한다. SELECT NAME, COUNT(NAME) FROM ANIMAL_INS GROUP BY NAME 2) 이 중 두 번 이상 쓰인 이름만을 구해야 하기 때문에, HAVING을 이용한다. SELECT NAME, COUNT(NAME) FROM ANIMAL_INS GROUP BY NAME HAVING (COUNT(NAME) >= 2) 3) 결과는 이름순으로 조회해야 하므로, ORDER BY 사용. SELECT NAME, COUNT(NAME) FROM ANIMAL_INS GROUP BY NAME HAVIN.. 2022. 4. 2. 프로그래머스 GROUP BY (1) - 고양이와 개는 몇 마리 있을까 1) ANIMAL_INS 테이블에 ANIMAL_TYPE 종류는 2 가지 밖에 없다. SELECT DISTINCT ANIMAL_TYPE FROM ANIMAL_INS; -- 결과: Dog, Cat 2) ANIMAL_TYPE로 GROUPBY를 한 후, PK인 ANIMAL_ID 개수를 세어준다. SELECT ANIMAL_TYPE, COUNT(ANIMAL_ID) FROM ANIMAL_INS GROUP BY ANIMAL_TYPE; 3) 고양이를 개보다 먼저 조회하라는 조건이 있으므로, ANIMAL_TYPE 기준으로 정렬한다. SELECT ANIMAL_TYPE, COUNT(ANIMAL_ID) FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE; (ORDER BY를 .. 2022. 4. 2. GROUP BY 기초 예제 : SELECT 문에서 반환된 행을 그룹으로 나누어, 각 그룹에 대한 평균, 합계, 카운트 등의 집계함수 구할 수 있다. SELECT column1, FUNC(column2) FROM table GROUP BY column1 [예제1] 함수사용X -- MYSQL SELECT * FROM table GROUP BY column1 -- Oracle SELECT column1 FROM table GROUP BY column1 => 위 결과는 칼럼에 DISTINCT 한 것과 동일한 결과. [예제2] 함수사용 SELECT column1, SUM(column2) FROM table GROUP BY column1; => column1로 그룹화를 한 후, 각 그룹의 column2들의 합! [예제3] GROUP BY 여.. 2022. 4. 2. 이전 1 2 3 4 5 ··· 9 다음