반응형 분류 전체보기580 [SQL-String, Date, 난이도 중] 오랜 기간 보호한 동물(2) 테이블 테이블 문제 설명 해설 : 두 테이블 "ANIMAL_INS" 와 "ANIMAL_OUTS" 를 ANIMAL_ID에 대해 JOIN 해주면 ANIMAL_ID 별로 보호소에 들어온 시각과 입양 간 시각을 한 레코드에 조회할 수 있다. 그리고 여기서 보호 기간이 가장 긴 순으로 정렬을 해야 하는데, 보호 기간은 단순히 ANIMAL_OUTS의 DATETIME 값에서 ANIMAL_INTS의 DATATIME 값을 빼면 구할 수 있다. 이를 기준으로 내림차 순으로 정렬했을 때의 상위 2개 레코드를 추출해서 문제에서 원하는 정보인 ANIMAL_ID와 NAME 을 조회하면 된다. SELECT AI.ANIMAL_ID, AI.NAME FROM ANIMAL_INS AI JOIN ANIMAL_OUTS AO ON AI.ANI.. 2020. 12. 8. [SQL-GROUP BY, 난이도 중하] 고양이와 개는 몇 마리 있을까 해설 : 동물 종류 별 마리 수를 조회하는 문제이다. 그래서 "ANIMAL_TYPE" 필드를 기준으로 그룹핑 해줘야 한다. 테이블을 보면 동물 종류는 개(Dog), 고양이(Cat) 밖에 없어서 WHERE 문은 쓰지 않아도 된다. "Cat"이 "Dog"보다 먼저 조회 되게 "ANIMAL_TYPE" 필드를 기준으로 오름차순 하여, 최종적으로 문제에서 원하는 "ANIMAL_TYPE" 필드와 ANIMAL_TYPE 별로 그룹핑된 컬럼 수를 조회하면 된다. SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE; SELECT : 조회하라 ANIMAL_TYPE, COUNT(ANIMAL_TY.. 2020. 12. 8. [SQL-GROUP BY, 난이도 중] 동명 동물 수 찾기 해설 : 이름 별 동명 동물 마리 수를 조회해야 하기 때문에 NAME 을 기준으로 그룹핑 되어야 한다. NAME을 기준으로 그룹핑 하여, NAME과 NAME 별로 그룹핑된 컬럼 수를 조회하는 서브테이블(A) 을 만들어두고 이 테이블의 COUNT 필드값이 2 이상인 경우에만 조회를 하도록 조건을 걸어서 동명 동물 정보만 출력할 수 있게 하였다. 그리고 마지막에 NAME을 기준으로 오름차순 정렬했고, 최종 적으로 A 테이블에서 이 문제에서 원하는 정보인 NAME과 COUNT 필드를 조회할 수 있게 하면 된다. SELECT A.NAME, A.COUNT FROM (SELECT NAME, COUNT(NAME) COUNT FROM ANIMAL_INS GROUP BY NAME) AS A WHERE A.COUNT>1 .. 2020. 12. 8. [SQL-SUM,MAX,MIN, 난이도 하] 최댓값 구하기 해설 : 테이블 "ANIMAL_INS" 의 DATETIME은 보호소에 들어온 시각이기 때문에, 가장 최근에 보호소에 들어온 동물이 보호소에 들어온 시각은 DATETIME의 최댓값으로 알 수 있는 것이다. 이 값을 조회하면 된다. SELECT MAX(DATETIME) FROM ANIMAL_INS; SELECT : 조회하라 MAX(DATETIME) : DATETIME 필드값의 최댓값을 FROM ANIMAL_INS : 테이블 "ANIMAL_INS" 에서 만약 직접 정렬 후 상위 레코드 하나를 추출하는 방법을 쓰고 싶다면 다음과 같이 ORDER BY, LIMIT를 사용하면 된다. SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME DESC LIMIT 1; SELECT : 조.. 2020. 12. 8. [SQL-SUM,MAX,MIN, 난이도 하] 최솟값 구하기 해설 : 테이블 "ANIMAL_INS" 의 DATETIME은 보호소에 들어온 시각이기 때문에, 보호소에 가장 먼저 들어온 동물이 보호소에 들어온 시각은 DATETIME의 최솟값으로 알 수 있는 것이다. 이 값을 조회하면 된다. SELECT MIN(DATETIME) FROM ANIMAL_INS; SELECT : 조회하라 MIN(DATETIME) : DATETIME 필드 값의 최솟 값을 FROM ANIMAL_INS : 테이블 "ANIMAL_INS" 에서 만약 직접 정렬 후 상위 레코드 하나를 추출하는 방법을 쓰고 싶다면 다음과 같이 ORDER BY, LIMIT를 사용하면 된다. SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1; SELECT : 조회하라 .. 2020. 12. 8. [SQL-GROUP BY, 난이도 중상] 입양 시각 구하기(2) kimcoder.tistory.com/208?category=897810 [SQL-GROUP BY, 난이도 중] 입양 시각 구하기(1) 해설 : DATETIME을 보면 "0000-00-00 00:00:00" 형식을 지키고 있다. 여기서 HOUR 함수를 이용하면 쉽게 "시" 만 추출할 수 있다. 그리고 테이블의 레코드 수는 COUNT 함수로 구할 수 있다. 시간대 별 입양 건 kimcoder.tistory.com 해설 : 위에 링크로 첨부한 입양 시각 구하기(1) 과의 차이점은 COUNT(*) 값이 0인 레코드 포함 여부이다. 이번 문제에서는 0부터 23까지 모든 시간대 별로 입양 시각 분포를 구해야 한다. 이 문제는 곰곰히 생각해도 잘 풀리지 않아서 검색을 해봤는데 핵심은 변수를 사용한다는 점이었다. 이.. 2020. 12. 7. [SQL-GROUP BY, 난이도 중] 입양 시각 구하기(1) 해설 : DATETIME을 보면 "0000-00-00 00:00:00" 형식을 지키고 있다. 여기서 HOUR 함수를 이용하면 쉽게 "시" 만 추출할 수 있다. 그리고 테이블의 레코드 수는 COUNT 함수로 구할 수 있다. 시간대 별 입양 건 수를 구하는 것이 목적이므로, 그룹핑은 시간대가 기준이 되어야 한다. 그리고 이 테이블에서 시간대는 9시부터 19시로 딱 맞아 떨어지지 않기 때문에 HOUR이 9~19 인 레코드만 나오도록 조건 지정을 해줘야 한다. 마지막으로, 시간대 순으로 정렬해주면 문제에서 원하는 결과가 나온다. SELECT HOUR(DATETIME) HOUR, COUNT(*) COUNT FROM ANIMAL_OUTS WHERE HOUR(DATETIME) BETWEEN 9 AND 19 GROUP.. 2020. 12. 7. [SQL-JOIN, 난이도 중하] 없어진 기록 찾기 테이블 테이블 문제 설명 해설 : ANIMAL_INS, ANIMAL_OUTS 테이블에 있는 동물들은 각각 보호소에 왔던 동물들, 입양 간 동물들이다. 보호소에 들어온 기록은 없고 입양을 간 기록만 있는 동물들을 벤 다이어그램으로 나타내면 다음과 같다. (A=ANIMALS_INS, B=ANIMAL_OUTS) A를 B와 RIGHT JOIN을 해주고 A 부분을 제거해주면 해당 테이블을 만들 수 있다. 이 테이블에서 ANIMAL_OUTS의 ANIMAL_ID를 기준으로 오름차 순 적용하여, 문제가 원하는 정보인 ANIMAL_ID, NAME 값을 레코드마다 추출하여 반환해주면 된다. SELECT AO.ANIMAL_ID, AO.NAME FROM ANIMAL_INS AI RIGHT JOIN ANIMAL_OUTS AO .. 2020. 12. 7. [SQL-JOIN, 난이도 중하] 있었는데요 없었습니다 테이블 테이블 문제 설명 해설 : ANIMAL_INS와 ANIMAL_OUTS 테이블을 ANIMAL_ID에 대해 JOIN해주면 한 동물이 보호소에 들어왔을 때와 입양 갔을 때의 정보를 한 레코드에 확인할 수 있게 된다. ANIMAL_INS, ANIMAL_OUTS의 DATETIME은 각각 보호 시작일과 입양일을 의미하기 때문에 ANIMAL_OUT의 DATETIME이 ANIMAL_INS의 DATETIME보다 더 작은 레코드들을 찾으면 된다. 문제가 원하는 정보인 ANIMAL_ID, NAME 값을 레코드마다 추출하여 반환해주면 된다. SELECT AI.ANIMAL_ID, AI.NAME FROM ANIMAL_INS AI JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID=AO.ANIMAL_ID WHE.. 2020. 12. 7. 이전 1 ··· 41 42 43 44 45 46 47 ··· 65 다음