JOIN - ON
-- 코드를 입력하세요
SELECT A.FLAVOR
FROM FIRST_HALF AS A
JOIN ICECREAM_INFO AS B
ON A.FLAVOR = B.FLAVOR
WHERE A.TOTAL_ORDER > 3000 AND
B.INGREDIENT_TYPE = 'fruit_based'
ORDER BY TOTAL_ORDER DESC
조건에 부합하는 중고거래 댓글 조회하기
SELECT
B.TITLE,
B.BOARD_ID,
R.REPLY_ID,
R.WRITER_ID,
R.CONTENTS,
DATE_FORMAT(R.CREATED_DATE, "%Y-%m-%d") AS CREATED_DATE
FROM
USED_GOODS_BOARD AS B
JOIN USED_GOODS_REPLY AS R ON B.BOARD_ID = R.BOARD_ID
WHERE
B.CREATED_DATE >= "2022-10-01"
AND B.CREATED_DATE <= "2022-10-31"
ORDER BY
R.CREATED_DATE,
B.TITLE;
상품 별 오프라인 매출 구하기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/131533
-- 코드를 입력하세요
SELECT P.product_code,
Sum(P.price * S.sales_amount) AS SALES
FROM product P
JOIN offline_sale S
ON P.product_id = S.product_id
GROUP BY P.product_code
ORDER BY sales DESC,
P.product_code
조건에 맞는 도서와 저자 리스트 출력하기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/144854
-- 코드를 입력하세요
SELECT book_id,
author_name,
Date_format(published_date, "%y-%m-%d") AS PUBLISHED_DATE
FROM book AS B
JOIN author AS A
ON B.author_id = A.author_id
WHERE B.category = "경제"
ORDER BY B.published_date;
GROUP BY - HAVING
GROUP BY - HAVING을 통해 특정 컬럼별로 그룹을 지어줄수있고, 이때 그룹별로 HAVING 절에 해당하는 조건으로 묶어줄 수 있다.
여기를 읽으면 이해가 된다. https://wkdtjsgur100.github.io/groupby-having/
재구매가 일어난 상품과 회원 리스트 구하기
프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131536
-- 코드를 입력하세요
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING count(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC;
위 문제를 통해 예제 코드를 만들어 낼 수 있는데, 이것만으로 헷갈려서 좀 더 풀어봐야겠다.
동명 동물 수 찾기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/59041
-- 코드를 입력하세요
SELECT NAME,
Count(*)
FROM animal_ins
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING Count(*) >= 2
ORDER BY NAME
가격대 별 상품 개수 구하기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/131530
-- 코드를 입력하세요
SELECT Truncate(price, -4) AS PRICE_GROUP,
Count(*) AS PRODUCTS
FROM product
GROUP BY price_group
ORDER BY price_group
TRUNCATE 을 사용하면 숫자 내림이 가능하다.
위 예제를 보면, 만원자리수 대로 셀렉한 애들을 그룹으로 엮어주었다. 신기했다.
진료과별 총 예약 횟수 출력하기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/132202
-- 코드를 입력하세요
SELECT mcdp_cd AS 진료과코드,
Count(mcdp_cd) AS 5월예약건수
FROM appointment
WHERE Month(apnt_ymd) = 5
AND Year(apnt_ymd) = 2022
GROUP BY mcdp_cd
ORDER BY 5월예약건수,
진료과코드
ORDER BY할 떄 “5월예약건수” 이런식으로 했더니 자꾸 틀리더라. ORDER BY 할 땐 따옴표없이 5월예약건수 해야 된다.
동명 동물 수 찾기
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59041
-- 코드를 입력하세요
SELECT NAME,
Count(NAME) AS "COUNT"
FROM animal_ins
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING Count(NAME) > 1
ORDER BY NAME;
입양 시각 구하기(1)
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59412
-- 코드를 입력하세요
SELECT Hour(datetime) AS HOUR,
Count(animal_id) AS COUNT
FROM animal_outs
WHERE Hour(datetime) >= 9
AND Hour(datetime) <= 19
GROUP BY hour
ORDER BY hour;
궁금점 1: Where 절, Having절 두 방법 모두 조건을 걸 수 있는데, 어떤게 성능적으로 더 좋을까?
답 : HAVING은 SLELECT 한 애들을 그룹화하면서 having으로 조건 거는것,
WHERE은 SELECT할 떄 걸러서 들고 온 애들을 GROUP화하는것
그래서 WHERE로 Row 갯수를 줄인 뒤 다음 작업을 하는게 훨씬 빠르다.
궁금점 2: 조건식과 BETWEEN의 성능 차이는?
출처 : https://velog.io/@ggomjae/Mysql-Query-Between-과-성능-차이-비교-더미데이터-50만
결과 : 부등호가 빠르다.
기존에 알고 있던 상식으로는 = >= 등의 연산자가 BETWEEN IS 등의 연산자보다 빠르다고 알고있었는데, 이유까진 몰랐었다. 지금 읽고 있는 <Real My SQL8.0>을 얼른 다 읽어봐야겠다.
<친절한 SQL 튜닝>도 추천받았던 책인데 읽어봐야겠다.
성분으로 구분한 아이스크림 총 주문량
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/133026
-- 코드를 입력하세요
SELECT I.ingredient_type,
Sum(total_order) AS TOTAL_ORDER
FROM first_half AS F
JOIN icecream_info AS I
ON F.flavor = I.flavor
GROUP BY I.ingredient_type
ORDER BY total_order
'BackEnd > SQL' 카테고리의 다른 글
[Oracle/JPA] Pagination Fetch 구문 에러 (0) | 2023.07.09 |
---|---|
[SQL/ORACLE] ORA-00911: invalid character 에러 (0) | 2023.06.30 |
[SQL/ORACLE] missing left parenthesis 에러 (0) | 2023.06.18 |
SQL공부 feat. 프로그래머스 (6) (Level 4) (0) | 2023.03.21 |
SQL공부 feat. 프로그래머스 (5) (Level 3) (0) | 2023.03.21 |
SQL공부 feat. 프로그래머스 (4) (CASE-WHEN-ELSE-END) (0) | 2023.03.19 |
SQL문 연습 with 프로그래머스 (2) (MySQL) (0) | 2023.02.11 |
SQL문 연습 with 프로그래머스 (1) (MySQL) (0) | 2023.02.08 |
댓글