일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- google 로그인
- oauth
- Loss Function
- OG tag
- yolo
- idToken
- Expo
- react native
- JPA
- google cloud
- matplotlib
- STT
- 양방향 매핑
- 커스텀 데이터 학습
- C++
- pandas
- javascript
- AWS
- Spring Boot
- html
- 코드업
- marksense.ai
- YOLOv5
- 순환참조
- @Transactional
- 졸프
- skt fellowship 3기
- Spring
- 2021 제9회 문화공공데이터 활용경진대회
- google login
- Today
- Total
민팽로그
[MySQL] SQL 복습 본문
1. RANK()
- 즐겨찾기가 가장 많은 식당 정보 출력하기
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM (SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES,
RANK() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS RA
FROM REST_INFO) T
WHERE RA <= 1
ORDER BY FOOD_TYPE DESC
2. NULL처리
a. IFNULL
b. NULLIF
3. UNION
4. DATE_FORMAT
// 1
SELECT DATE_FORMAT(T.SALES_DATE, '%Y-%m-%d') AS SALES_DATE, T.PRODUCT_ID, T.USER_ID, T.SALES_AMOUNT
FROM (
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
UNION ALL
SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
) AS T
ORDER BY T.SALES_DATE ASC, T.PRODUCT_ID ASC, T.USER_ID ASC
// 2
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
UNION ALL
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03%'
ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC
5. EXISTS, IN
-- 1
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID
--2
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION NOT IN ('Aged')
ORDER BY ANIMAL_ID
6. DATETIME의 YEAR, MONTH, DATE
-- 코드를 입력하세요
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE YEAR(JOINED)='2021' AND AGE BETWEEN 20 AND 29
7. DISTINCT
-- 코드를 입력하세요
SELECT COUNT(DISTINCT(NAME))
FROM ANIMAL_INS
8. AS
- SELECT절의 AS는 GROUP BY, ORDER BY절에서는 사용 가능 but WHERE절에서는 사용 불가
SELECT HOUR(DATETIME) AS HOUR,COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY HOUR
ORDER BY HOUR ASC
SELECT HOUR(DATETIME) AS HOUR,COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR BETWEEN 9 AND 19
ORDER BY HOUR ASC
9. 재귀 쿼리: WITH RECURSIVE
- WITH: 메모리 상에 가상 테이블을 만드는데에 사용
https://wakestand.tistory.com/455
MySQL WITH 절 사용법 및 예제(가상 테이블)
MySQL에서는 오라클과 동일하게 WITH 문으로 가상테이블을 만들 수 있는데 작성방법은 다음과 같다 WITH 가상테이블명 AS ( SELECT 쿼리 UNION ALL -- 뭐 붙이거나 할 경우 추가 SELECT 쿼리 ) WITH를 이용해
wakestand.tistory.com
WITH RECURSIVE 테이블명 AS(
SELECT 초기값 AS 컬럼명
UNION ALL
SELECT 계산식 FROM 테이블명 WHERE 제어식
)
https://hyunmin1906.tistory.com/149
[MySQL] WITH 재귀(RECURSIVE) 쿼리 계층구조
주의 !! mysql 5.7 이하 미지원 ■ WITH RECURSIVE 문 메모리 상에 가상의 테이블을 저장 재귀 쿼리를 이용하여 실제로 테이블을 생성하거나 데이터삽입(INSERT)을 하지 않아도 가상 테이블을 생성할 수
hyunmin1906.tistory.com
--프로그래머스 입양 시각 구하기
-- 1
WITH RECURSIVE H AS(
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1 FROM H WHERE HOUR < 23
)
SELECT H.HOUR, IFNULL(T.COUNT, 0) AS COUNT
FROM H LEFT JOIN (SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR) AS T
ON H.HOUR = T.HOUR
ORDER BY HOUR
-- 2
SELECT H.HOUR, COUNT(T.ANIMAL_ID) AS COUNT
FROM H LEFT JOIN ANIMAL_OUTS AS T
ON H.HOUR = HOUR(T.DATETIME)
GROUP BY H.HOUR
ORDER BY H.HOUR
10. FLOOR
SELECT FLOOR(PRICE/10000)*10000 AS PRICE_GROUP, COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP/10000
ORDER BY PRICE_GROUP/10000 ASC
11. 반올림, 버림
두 번째 파라미터가 양수 a -> 소수점 아래 a자리까지 표시. 소수점 아래 a+1자리에서 반올림
두 번째 파라미터가 음수 a -> a자리에서 반올림.
- ROUND(반올림 할 수 또는 컬럼, 반올림 할 자리 수)
- TRUNCATE(버림 할 수 또는 컬럼, 버림 할 자리 수)
12. GROUP BY문제: 식품분류별 가장 비싼 식품의 정보 조회하기
-- 코드를 입력하세요
SELECT F.CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT F INNER JOIN
(SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY) M
ON F.PRICE = M.MAX_PRICE AND F.CATEGORY = M.CATEGORY
ORDER BY PRICE DESC
13. 프로그래머스 GROUP BY 문제
- 년, 월, 성별 별 상품 구매 회원 수 구하기
-- 코드를 입력하세요
SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE) AS MONTH, GENDER, COUNT(DISTINCT(U.USER_ID)) AS USERS
FROM USER_INFO U INNER JOIN ONLINE_SALE O
ON U.USER_ID = O.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY YEAR, MONTH, GENDER
ORDER BY YEAR ASC, MONTH ASC, GENDER ASC
14. MYSQL 정규식: REGEXP
-- 코드를 입력하세요
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM ANIMAL_INS I JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID=O.ANIMAL_ID
WHERE SEX_UPON_INTAKE LIKE 'Intact%'
AND SEX_UPON_OUTCOME REGEXP 'Spayed+|Neutered+'
ORDER BY I.ANIMAL_ID
15. 프로그래머스 JOIN 문제
- 상품을 구매한 회원 비율 구하기
-- 코드를 입력하세요
WITH MAY AS(
SELECT *
FROM USER_INFO
WHERE YEAR(JOINED)=2021
)
SELECT YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
COUNT(DISTINCT(O.USER_ID)) AS PUCHASED_USERS,
ROUND(COUNT(DISTINCT(O.USER_ID))/(SELECT COUNT(*) FROM MAY), 1) AS PUCHASED_RATIO
FROM MAY M INNER JOIN ONLINE_SALE O
ON M.USER_ID=O.USER_ID
GROUP BY YEAR, MONTH
ORDER BY 1, 2
16. JOIN 여러개
- APPOINTMENT와 PATIENT, APPOINTMENT와 DOCTOR가 관계가 있는 상태임
SELECT APNT_NO, PT_NAME, A.PT_NO, A.MCDP_CD, DR_NAME, APNT_YMD
FROM APPOINTMENT A
JOIN PATIENT P
JOIN DOCTOR D
ON A.MDDR_ID=D.DR_ID
AND A.PT_NO=P.PT_NO
WHERE A.MCDP_CD='CS'
AND DATE_FORMAT(APNT_YMD, '%Y-%m-%d')='2022-04-13'
AND APNT_CNCL_YN='N'
ORDER BY APNT_YMD
17. 문자열
https://needjarvis.tistory.com/64
[MySQL] 문자열 추출하기, SUBSTRING, SUBSTR
오라클에도 존재하듯, MySQL에도 SUBSTRING 기능이 존재한다. 이 SUBSTRING은 거의 모든 언어나 DBMS에 자체적으로 내장이 되어 있고, 사용방법도 비슷하다. SUBSTR이라고 써도 되고, SUBSTRING으로 써도 된
needjarvis.tistory.com
18. IF, CASE
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rorean&logNo=221594169204
'Database' 카테고리의 다른 글
[MySQL] 데이터베이스 생성 및 사용자 설정 (0) | 2021.07.31 |
---|