MySql 집계함수
| 함수명 | 함수 표기 | 설명 |
| SUM | SUM() | 합계를 구한다. |
| AVG | AVG() | 평균을 구한다. |
| MIN | MIN() | 최솟값을 구한다. |
| MAX | MAX() | 최대값을 구한다. |
| COUNT | COUNT() | 행의 갯수를 센다 |
| COUNT DISTINCT | COUNT(DISTINCT) | 행의 갯수를 센다.(중복은 1개만 인정) |
집계함수 실습
SELECT
SUM(order_cnt) AS '총주문수량',
AVG(order_cnt) AS '평균주문수량',
MIN(order_cnt) AS '최저주문수량',
MAX(order_cnt) AS '최고주문수량',
COUNT(*) AS '행의갯수',
COUNT(DISTINCT order_no) AS '총주문건수'
FROM
orderitems;
실행결과

-- 데이터 그룹핑 : group by [열]
-- 데이터 그룹 필터링 : having 조건[집계] = 값)
-- 실행 순서 : from -> where -> group by -> having -> select -> order by -> limit
group by 실습
SELECT
oi.order_no AS '주문번호',
SUM(oi.order_cnt) AS '주문번호별 구매수량'
FROM
orderitems oi
WHERE
oi.order_no >= 1
AND
oi.order_no <= 5
GROUP BY oi.order_no;
실행결과

having 실습
SELECT
oi.order_no AS '주문번호',
SUM(oi.order_cnt) AS '주문번호별 구매수량'
FROM
orderitems oi
WHERE
oi.order_no >= 1
AND
oi.order_no <= 5
GROUP BY oi.order_no
HAVING SUM(oi.order_cnt) >= 10;
실행결과

윈도우 함수
window_function() over (partition by order by)
데이터 변환함수
cast, convert
-- cast, convert 함수
SELECT
CAST('2024-09-12' AS DATE),
CONVERT ('2024-09-12', DATE);
문자열 연결함수
concat, concat_ws, substring, substring_index
-- concat
SELECT CONCAT('ksmart',53,'기');
SELECT CONCAT('문지훈',', ', '조은아',', ', '김나연',', ', '유경식',', ', '한찬희' );
-- 구분자를 기준으로 문자열 연결함수
-- concat_ws(구분자, 문자열1, 문자열2...)
SELECT CONCAT_WS(', ','문지훈', '조은아', '김나연', '유경식', '한찬희');
-- substring (대상되는 문자열, 추출을 시작할 인덱스(인덱스시작 : 1~), 추출할 문자갯수)
SELECT
SUBSTRING('ksmart53기', 7),
SUBSTRING('ksmart53기', 7, 2);
-- substring_index (대상되는 문자열, '구분자', 양의 정수|음의 정수)
SELECT
SUBSTRING_INDEX('문지훈,조은아,김나연', ',', -1);
trim, replace
-- 앞뒤 공백을 제거한 후 문자열 반환
SELECT TRIM(' ksmart 53기 ');
-- 대상되는 문자열에서 특정 문자를 교체한 후 문자열 반환
SELECT REPLACE('ksmart53기', 'ksmart', '한국스마트정보교육원');
묵시적 형변환
MySql은 서로 다른 데이터 타입이어도 연산 작업을 할 수 있으니 주의해야한다.
SELECT '100' + '200';
SELECT 1 < 'Mega2';
SELECT 1 < 2;
SELECT 0 = 'Mega2';
제어 흐름 함수
if, ifnull, nullif, case
SELECT
oi.order_no,
oi.order_item,
oi.order_prod_cd,
(CASE 10
WHEN 10 THEN '열'
WHEN 10 THEN '구'
END) AS 'CASE 문',
(CASE
WHEN (oi.order_cnt = 10) THEN '열'
WHEN (oi.order_cnt = 9) THEN '열'
ELSE
'영'
END) AS 'CASE 문',
IF(
(oi.order_cnt = 10),
'열',
IF(
(oi.order_cnt = 9)
, '구',
'영'
)
) AS 'IF문',
IFNULL((oi.order_cnt * 50000), 0),
NULLIF(oi.order_cnt, 9)
-- NULLIF(oi.order_cnt, 10)
FROM
orderitems oi
WHERE
oi.order_no = 9;
실행 결과

'DB > MySql' 카테고리의 다른 글
| 09.20 정규화, 서브쿼리 (0) | 2024.09.20 |
|---|---|
| 09.13 날짜 함수, 세션 변수, JOIN (0) | 2024.09.13 |
| 08.29 DML select, insert, update, delete문 (0) | 2024.09.09 |
| 08.28 DDL create, drop, grant, revoke 문 (0) | 2024.09.09 |