본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

DB/SQL Problems30

[SQL] 헤비 유저가 소유한 장소 - 2021 Dev-Matching 테이블 문제 설명 해설 : HOST_ID별 튜플의 수를 구하고, 튜플의 수가 2 이상인 HOST_ID들을 추출한 서브쿼리를 이용한다. 메인 쿼리의 HOST_ID가 서브 쿼리의 HOST_ID 리스트에 속한다면 이 튜플을 모두 출력하면 된다. SELECT * FROM PLACES WHERE HOST_ID IN( SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(*)>1 ) ORDER BY ID; 문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/77487 2022. 6. 5.
[SQL] 우유와 요거트 - Summer/Winter Coding(2019) 테이블 문제 설명 해설 : 하나의 장바구니에 같은 제품을 담을 수도 있기 때문에 CART_ID, NAME 쌍이 중복인 튜플을 제거한 서브테이블을 생성한다. 이 서브테이블에 대해서 CART_ID별로 NAME이 Milk 또는 Yogurt인 튜플의 개수를 카운트해서, 카운트가 2인 CART_ID를 최종적으로 출력하면 된다. SELECT CART_ID FROM (SELECT DISTINCT CART_ID, NAME FROM CART_PRODUCTS) AS DT WHERE NAME IN ('Milk', 'Yogurt') GROUP BY CART_ID HAVING COUNT(*)=2 ORDER BY CART_ID; 2022. 4. 15.
[SQL-SUM,MAX,MIN, 난이도 하] 동물 수 구하기 해설 : "ANIMAL_INS" 테이블의 레코드 수를 조회하면 된다. SELECT COUNT(*) AS count FROM ANIMAL_INS; SELECT : 조회하라 COUNT(*) AS count : 모든 레코드들의 개수를 (조회 시 필드명은 "count"로 표시함) FROM ANIMAL_INS : 테이블 "ANIMAL_INS" 에서 2020. 12. 8.
[SQL-SUM,MAX,MIN, 난이도 중하] 중복 제거하기 해설 : DISTINCT를 활용할 수 있어야 하는 문제이다. 테이블 "ANIMAL_INS" 에서 NAME 값이 NULL인 레코드는 제외하고, NAME이 중복되는 레코드들이 있다면 하나만 남겨두고 추출하면 된다. 최종적으로 추출된 레코드의 개수를 출력하면 된다. SELECT COUNT(DISTINCT NAME) AS count FROM ANIMAL_INS WHERE NAME IS NOT NULL; SELECT : 조회하라 COUNT(DISTINCT NAME) AS count : "NAME" 필드를 가지는 레코드의 개수를 출력하되, 중복되는 레코드들이 있다면 하나만 남기며 (조회 시 필드명은 "count" 로 표시함) FROM ANIMAL_INS : "ANIMAL_INS" 테이블로부터 WHERE NAME I.. 2020. 12. 8.
[SQL-String, Date, 난이도 중하] 루시와 엘라 찾기 해설 : 테이블 "ANIMAL_INS"의 NAME 값이 "Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty" 중 하나인 레코드들을 추출하여 문제에서 원하는 "ANIMAL_ID", "NAME", "SEX_UPON_INTAKE" 필드를 조회하면 된다. SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME="Lucy" OR NAME="Ella" OR NAME="Pickle" OR NAME="Rogan" OR NAME="Sabrina" OR NAME="Mitty" ORDER BY ANIMAL_ID; SELECT : 조회하라 ANIMAL_ID, NAME, SEX_UPON_INTAKE : "ANIMAL_ID.. 2020. 12. 8.
[SQL-String, Date, 난이도 중하] 이름에 el이 들어가는 동물 찾기 해설 : 테이블 "ANIMAL_INS" 에서 NAME 필드 값에 "EL" 이 포함되면서 ANIMAL_TYPE이 "DOG" 인 레코드들을 NAME을 기준으로 오름차 순으로 정렬하고, 문제에서 요구하는 "ANIMAL_ID", "NAME" 필드를 조회하면 된다. SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE="DOG" ORDER BY NAME; SELECT : 조회하라 ANIMAL_ID, NAME : "ANIMAL_ID", "NAME" 필드명을 FROM ANIMAL_INS : "ANIMAL_INS" 테이블으로부터 WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE="DOG" : NAME 필드 값에 ".. 2020. 12. 8.
[SQL-String, Date, 난이도 중하] 중성화 여부 파악하기 해설 : 조건문과 LIKE문을 활용할 수 있는가 묻는 문제이다. "ANIMAL_INS" 테이블에서 "ANIMAL_ID", "NAME", "SEX_UPON_INTAKE" 필드를 조회하면 되는데, "SEX_UPON_INTAKE" 필드 같은 경우에는 중성화된 동물은 'O', 그렇지 않은 동물은 'X' 로 표시하면 된다. "SEX_UPON_INTAKE" 필드 값(문자열)이 "Neutered" 또는 "Spayed" 라는 단어로 시작한다면 중성화된 동물이라고 한다. 단어 포함 여부를 판단하기 위해 LIKE문을 쓰는 것이고, 이 여부를 판단하여 주어진 조건 별로 처리 하기 위해 조건문을 쓰는 것이다. 대표적인 조건문으로 IF, CASE가 있는데 이 2가지를 사용하는 방법을 각각 소개할 것이다. 1) 조건문으로 IF를.. 2020. 12. 8.
[SQL-String, Date, 난이도 중하] DATETIME에서 DATE로 형 변환 - 양식 - 해설 : 테이블 "ANIMAL_INS" 에서 문제에서 원하는 "ANIMAL_ID", "NAME", "DATETIME" 필드를 출력 하면 되는데, DATETIME 에서 형식을 조금 바꿔야 한다. "0000-00-00 00:00:00" -> "0000-00-00" 해당 문제는 LEFT 함수를 이용하면 된다. 왼쪽에서부터 10개 만큼의 문자들을 추출해내는 것이다. SELECT ANIMAL_ID, NAME, LEFT(DATETIME,10) FROM ANIMAL_INS; SELECT : 조회하라 ANIMAL_ID, NAME, LEFT(DATETIME, 10) : "ANIMAL_ID", "NAME", "DATETIME" 필드를, 특히 "DATETIME" 필드는 왼쪽으로 부터 10개의 문자만큼 추출하여 .. 2020. 12. 8.
[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.