##문자열을 합칠때 CONCAT사용!
CONCAT('/home/grep/src/', B.BOARD_ID, '/', FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH
concat(CITY, ' ', STREET_ADDRESS1) #공백을 넣고 싶다면 이렇게!
##변수가 조건을 만족할때만
WHERE VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD )
## "STATUS"의 원소들을 재 분류해 변수명을 "STATUS"로 출력
CASE
WHEN STATUS = 'SALE' THEN '판매중'
WHEN STATUS = 'RESERVED' THEN '예약중'
WHEN STATUS = 'DONE' THEN '거래완료'
END AS STATUS
## 날짜/시간 표현 함수
DATE_FORMAT(변수명, "조건") # %Y/y - %M/m - %D/d
YEAR, MONTH, DAY, HOUR (변수명) #원하는 정보만 출력
## 날짜 차이
DATEDIFF(날짜1, 날짜2)+1 #총 기간
##where조건을 다른 테이블과 비교할 때
#equal LIMIT 1 값이 일치하는지 확인
WHERE M.MEMBER_ID = (
SELECT MEMBER_ID
FROM REST_REVIEW R
GROUP BY MEMBER_ID
ORDER BY COUNT(*) DESC LIMIT 1
)
#or 주어진 보기 안에 있는지 확인
where USER_ID in (
SELECT WRITER_ID
from USED_GOODS_BOARD
group by WRITER_ID
having count(*)>=3)
##join되는 테이블을 제한할 때
select H.FLAVOR
from FIRST_HALF H
join (select Flavor, sum(total_order) as total_order
from july
group by flavor) J #조건에 만족하는 july값과 join
on H.flavor = J.flavor
##출력되는 결과를 조정할 때
#unique
DISTINCT 변수명
#limit
LIMIT 원하는 개수
#자리수 조정
TRUNCATE(변수,-4) #뒤의 네자리수는 버림
##조건지정
#보기중에 있는지 확인
where(and) A.CAR_TYPE in/not in ('세단','suv')
#범위안에 있는지
between A and B
#일치 하는지
IS NULL/ IS NOT NULL
= / !=
##NULL다루기
IFNULL(변수명,"NULL이면 출력될 값")
##빈 가상의 테이블 만들기
WITH RECURSIVE blank AS ( #빈 가상의 테이블 만들기
SELECT 0 AS HOUR #select 0 as hour-> 0이 데이터인 hour변수 생성
UNION ALL #데이터 0~23으로 늘리기
SELECT HOUR + 1 #hour(0이 시작)+1
FROM blank
WHERE HOUR < 23 #hour이 22가 될때 까지
)
##두 테이블을 하나로 만들기 *JOIN은 두 테이블 결합, UNION은 두 테이블 통합
#UNION: 중복 제거, UNION ALL: 중복 포함
SELECT DATE_FORMAT(A.SALES_DATE,'%Y-%m-%d') AS SALES_DATE,
A.PRODUCT_ID, A.USER_ID, A.SALES_AMOUNT
FROM ONLINE_SALE A
WHERE SALES_DATE LIKE "2022-03%"
UNION ALL
SELECT DATE_FORMAT(B.SALES_DATE,'%Y-%m-%d') AS SALES_DATE,
B.PRODUCT_ID, NULL AS USER_ID, B.SALES_AMOUNT
FROM OFFLINE_SALE B
WHERE SALES_DATE LIKE "2022-03%"
##평균
AVG(변수명)
##문자열의 길이 구하기
LENGTH('안녕') # = 6 Byte단위
CHAR_LENGTH('안녕') # = 2 문자 개수
##평균 구할때 최대 최소를 빼고 싶다면..그냥 직접 구해라 평균!!
SELECT COMPANY,
CASE
WHEN COUNT(*) >= 3 THEN
(SUM(SALARY) - MAX(SALARY) - MIN(SALARY)) / (COUNT(*) - 2)
ELSE
AVG(SALARY)
END AS average_salary
FROM your_table
GROUP BY COMPANY;
##시간차이(원하는대로)
TIMESTAMPDIFF(MINUTE, START, END)
'''
SECOND : 초 / MINUTE : 분 / HOUR : 시
DAY : 일 / WEEK : 주 / MONTH : 월 / QUARTER : 분기 / YEAR : 연
'''
##반올림, 올림, 내림 함수
ROUND(TIMESTAMPDIFF(MINUTE, A.DATETIME, B.DATETIME)/60) #반올림
CEIL(TIMESTAMPDIFF(MINUTE, A.DATETIME, B.DATETIME)/60) #올림
FLOOR(TIMESTAMPDIFF(MINUTE, A.DATETIME, B.DATETIME)/60) #내림