SELECT
animal_id
, name
, sex_upon_intake
FROM
animal_ins
WHERE
name IN('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
;
아이디 순으로 조회해 주세요
조건이 예시에 적어저 있어서 쿼리에 구현을 못했다...
REGEXP를 이용한 풀이
SELECT
animal_id
, name
, sex_upon_intake
FROM
animal_ins
WHERE
name REGEXP '\\bLucy\\b|\\bElla\\b|\\bPickle\\b|\\bRogan\\b|\\bSabrina\\b|\\bMitty\\b'
ORDER BY
animal_id
;
REGEXP 'Lucy|Ella|Pickle|Rogan|Sabrina|Mitty'
로 쓰면 틀린 답이라고 나옴REGEXP
SELECT
animal_id
, name
, sex_upon_intake
FROM
animal_ins
WHERE
name
LIKE '%Lucy%' OR
name
LIKE '%Ella%' OR
name
LIKE '%Pickle%' OR
name
LIKE '%Rogan%' OR
name
LIKE '%Sabrina%' OR
name
LIKE '%Mitty%'
ORDER BY
animal_id
;
단어경계
(\b) 사용하거나 아래와 같이 시작과 끝 표시해주기SELECT
animal_id
, name
, sex_upon_intake
FROM
animal_ins
WHERE
name
REGEXP "^(Lucy|Ella|Pickle|Rogan|Sabrina|Mitty)$"
ORDER BY
animal_id
;
SELECT
b.category
, SUM(bs.sales) AS TOTAL_SALES
FROM
book_sales bs JOIN book b USING (book_id)
WHERE
DATE_FORMAT(bs.sales_date, '%Y-%m') = '2022-01'
GROUP BY
b.category
ORDER BY
b.category
;
조건 잘 확인하기!
2022년 1월
만WHERE절을 WHERE SALES_DATE LIKE '2022-01%
로 처리해도 된다고 함
WITH을 사용해 푼 분도 있었음
WITH TEMP AS (
SELECT BOOK_ID,SALES
, DATE_FORMAT(SALES_DATE, '%Y-%m') AS SALES_DATE
FROM BOOK_SALES
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = "2022-01"
)
SELECT A.CATEGORY, SUM(B.SALES) AS TOTAL_SALES
FROM BOOK A
INNER JOIN TEMP B ON A.BOOK_ID = B.BOOK_ID
GROUP BY A.CATEGORY
ORDER BY 1
서브쿼리 사용한 케이스
SELECT CATEGORY, SUM(TOTAL_SALES) TOTAL_SALES
FROM (
SELECT *, SUM(SALES) TOTAL_SALES
FROM BOOK_SALES
WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 1
GROUP BY BOOK_ID
) SUB
NATURAL JOIN BOOK
GROUP BY CATEGORY
ORDER BY 1;
WHERE절에서 처리
SELECT DISTINCT A.CATEGORY
, SUM(B.SALES) OVER (PARTITION BY A.CATEGORY) AS TOTAL_SALES
FROM BOOK A
JOIN BOOK_SALES B
ON A.BOOK_ID = B.BOOK_ID
WHERE YEAR(B.SALES_DATE) = '2022'
AND MONTH(B.SALES_DATE) = '1'
ORDER BY A.CATEGORY ASC;
SELECT
b.category
, SUM(bs.sales) AS total_sales
FROM
book b
LEFT JOIN book_sales bs
ON b.book_id = bs.book_id
WHERE
bs.sales_date
BETWEEN STR_TO_DATE('2022-01-01','%Y-%m-%d')
AND STR_TO_DATE('2022-01-31','%Y-%m-%d')
GROUP BY
b.category
ORDER BY
b.category
형변환과 인덱스M&A 자문
, M&A 전략 수립, IPO 공부해 두면 좋다고 함PMP 자격증
추천SQL은 다른 프로그래밍 언어나 프레임워크에 비해 발전이 매우 빠르지는 않고 표준이 정해져있어 최신 문서만 봐야 할 필요까지는 없지만, DBMS의 특정 버전 이후에서만 사용할 수 있는 함수가 있다던지 하는 시기가 중요한 정보도 분명히 있습니다.
예를 들어, MySQL은 2018년에 릴리즈한 8.0 버전부터 윈도우 함수를 지원하기 시작했기 때문에 ‘mysql cumulative sum(MySQL로 누적합 구하기)’를 검색해 2018년 이전 자료들만 살펴본다면 윈도우 함수가 아닌 서브쿼리를 이용한 풀이만 보게 될 확률이 높습니다.
검색결과의 꽤 상단에 stackoverflow에 2010년에 올라온 질문(링크)이 있죠. 들어가서 살펴보면 서브쿼리로 누적합을 구하는 답변이 가장 상단에 있습니다. MySQL 8.0 버전 이상을 쓰고 있다면 누적합은 서브쿼리로 계산하는 것보다 윈도우 함수로 계산하는 것이 훨씬 빠른데, 이 링크에 있는 정보만 보고 SQL을 작성하면 서브 쿼리로 작성을 하고 있겠죠. SQL에 대해서 검색을 할 때에도 정보의 최신성을 생각해야 하는 이유입니다.