[프로그래머스] SQL/정답 노트 12

[lv2] 이름에 el이 들어가는 동물 찾기

LIKE는 기본적으로 대소문자를 구분하지 않고 비교를 수행하나, 이는 사용중인 정렬 규칙에 따라 달라진다.e.g. utf8_general_ci에서 ci는 "case insensitive"를 의미하여 대소문자를 구분하지 않는 정렬을 나타냄 1. 오답SELECT ANIMAL_ID, NAMEFROM ANIMAL_INSWHERE NAME COLLATE utf8_bin LIKE '%el%' AND ANIMAL_TYPE = 'Dog'ORDER BY NAME 2. 정답SELECT ANIMAL_ID, NAMEFROM ANIMAL_INSWHERE NAME COLLATE utf8_general_ci LIKE '%el%' AND ANIMAL_TYPE = 'Dog'ORDER BY NAME  프로그래머스 환경에서는 기본적으로 ..

[lv4] 우유와 요거트가 담긴 장바구니

https://school.programmers.co.kr/learn/courses/30/lessons/62284#qna SELECT CART_IDFROM CART_PRODUCTSGROUP BY CART_IDHAVING EXISTS (SELECT * FROM CART_PRODUCTS WHERE NAME = 'Milk') AND EXISTS (SELECT * FROM CART_PRODUCTS WHERE NAME = 'Yogurt')ORDER BY CART_ID 1. 그룹화 하더라도 EXISTS는 모든 테이블에 대해 수행할 것이므로 수정해야 했다.2. SELECT문에 * 대신 COUNT(*)을 쓴다면 이는 COUNT가 0이어도 EXISTS TRUE 처리 됨에 주의해야 한다.3. 굳이 그룹화할 필요가 없었..

[lv2] 재구매가 일어난 상품과 회원 리스트 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/131536 유저별로 재구매가 일어난 상품을 출력하는 문제다.재구매 상품에 대해 첫 구매 컬럼을 제외하고 출력하는 문제면 까다로울 것 같다고 생각했다. SELECT USER_ID, PRODUCT_IDFROM ONLINE_SALEGROUP BY USER_ID, PRODUCT_IDHAVING COUNT(*) >= 2ORDER BY USER_ID, PRODUCT_ID DESC

[lv3] 저자 별 카테고리 별 매출액 집계하기

https://school.programmers.co.kr/learn/courses/30/lessons/144855인덱스가 걸려있는 경우 날짜 비교에서 BETWEEN이 LIKE보다 권장된다고 한다. LIKE는 모든 범위를 스캔하기 때문이다. SELECT AUTHOR_ID, AUTHOR_NAME, CATEGORY, SUM(PRICE * SALES) AS TOTAL_SALESFROM ( SELECT BOOK_ID, CATEGORY, AUTHOR_ID, AUTHOR_NAME, PRICE FROM BOOK JOIN AUTHOR USING(AUTHOR_ID)) B JOIN ( SELECT BOOK_ID, SALES FROM BOOK_SALES WHERE SALES_DATE LIK..

[lv3] 카테고리 별 도서 판매량 집계하기

https://school.programmers.co.kr/learn/courses/30/lessons/144855 MONTH()의 반환형은 INT라고 한다.= '1', LIKE '1'과 같이 자동형변환을 거칠 필요는 없었다. 와일드카드를 사용하지 않는 경우의 LIKE와 =의 비교에서, = 이 권장되었다.이유는 성능(동작은 비슷해지나, 오버헤드가 있다고 함), 가독성 이었다.LIKE는 근간이 패턴매칭을 위한 연산자였고, NUMBER 외의 문자열간의 비교에서도 =을 권장했다.SELECT CATEGORY, SUM(SALES) TOTAL_SALESFROM BOOK JOIN BOOK_SALESUSING(BOOK_ID)WHERE MONTH(SALES_DATE) = 1GROUP BY CATEGORYORDER BY ..