현제의 현재이야기

SQL 정리 본문

etc

SQL 정리

현재의 현제 2023. 4. 23. 21:27

1. 개수 제한

LIMIT 3

2. 날짜 사이

 where sales_date between '2022-03-01' and '2022-03-31'

3. 한 줄 없애기

SELECT null as user_id,

4. 평균과 소수점 제한

SELECT ROUND(AVG(R.REVIEW_SCORE)

5. 문자열 검색

WHERE ADDRESS LIKE "서울%"

응용: 3월에 태어난 사람

WHERE DATE_OF_BIRTH LIKE '%-03-%'

6. IF 활용

SELECT CAR_ID, IF(SUM(IF('2022-10-16' BETWEEN START_DATE AND END_DATE, 1, 0)) >= 1, '대여중', '대여 가능') AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC

7. ~ 그룹 중에서 가장 ~한 것 찾아내기

SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('식용유', '과자', '국', '김치')
AND PRICE IN (
    SELECT MAX(PRICE)
    FROM FOOD_PRODUCT
    WHERE CATEGORY IN ('식용유', '과자', '국', '김치')
    GROUP BY CATEGORY
)
GROUP BY CATEGORY, PRODUCT_NAME
ORDER BY MAX_PRICE DESC;
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE FAVORITES IN (
    SELECT MAX(FAVORITES)
    FROM REST_INFO
    GROUP BY FOOD_TYPE
)
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
  • 서브쿼리 이용

8. 특정한 필드만

WHERE CATEGORY IN ('식용유', '과자', '국', '김치')

9. 필드 두개 순서 정하기

ORDER BY FIELD (ANIMAL_TYPE, 'Cat','Dog')

10. SELECT에서 중복 제거

SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE) AS MONTH, U.GENDER, COUNT(DISTINCT O.USER_ID) AS USERS
  • DISTINCT 이용

11. SELECT에서 단위 설정

SELECT  ROUND(PRICE/10000, 0) * 10000 AS PRICE_GROUP, COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP 
ORDER BY PRICE
  • 먼저 PRODUCT 테이블에서 PRICE 컬럼을 10000으로 나눈 뒤 반올림하여 10000을 곱한 새로운 컬럼인 PRICE_GROUP을 만듭니다.
  • 새로운 컬럼을 기준으로 GROUP BY를 시행하고 COUNT(PRODUCT_ID)로 PRODUCTS 컬럼을 만들어 그룹별로 해당하는 상품의 수를 계산합니다
  • 그리고 PRICE_GROUP를 기준으로 group을 정한다.

또 다른 예시

SELECT 
    cust_id, 
    cust_name, 
    cust_age,
    CASE 
        WHEN cust_age >= 20 AND cust_age < 30 THEN '20s'
        WHEN cust_age >= 30 AND cust_age < 40 THEN '30s'
        WHEN cust_age >= 40 AND cust_age < 50 THEN '40s'
        ELSE '50s or older'
    END AS cust_age_group,
    order_date,
    product_name,
    price
FROM 
    sales_info
WHERE 
    cust_age_group = '30s'
ORDER BY 
    order_date DESC;
  • cust_age를 CASE WHEN 따라서 분류를 하고, 마지막 END AS로 컬럼 명을 정해준다.
  • 이것을 WHERE에서 사용할 수 있다.

'etc' 카테고리의 다른 글

[GoLang] 잊지 말아야 할 것들  (0) 2023.08.21
SQL 서브쿼리 연습  (0) 2023.04.25
AWS 1주차  (0) 2023.01.12
EC2 배포 정리  (0) 2023.01.08
새 토이 프로젝트 구상  (0) 2022.08.15
Comments