본문 바로가기
DB/MySql

09.12 집계 함수, group by, having, 윈도우 함수, 내장 함수, 제어 흐름

by 개발자결정 2024. 9. 12.

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