SQL

SQL_GROUP BY, ROLLUP, CUBE

S_pot 2021. 5. 31. 11:12
SELECT [groupName] FROM buyTbl;

-- GROUP BY: 그룹별로 지정해줌, DISTINCT와 결과는 비슷하지만
-- 개념은 다르다.
SELECT [groupName]
FROM buyTbl
GROUP BY [groupName];

 

SELECT [groupName], price, amount FROM buyTbl;

-- GROUP BY: 그룹별로 지정해줌, DISTINCT와 결과는 비슷하지만
-- 개념은 다르다.
SELECT groupName, SUM(price*amount) AS 합
FROM buyTbl
GROUP BY [groupName];

 

ROLLUP 총합계를 표시

SELECT groupName, SUM(price*amount) AS 합
FROM buyTbl
GROUP BY ROLLUP(groupName);

 

GROUP BY ROLLUP(groupName, num): 그룹별 합계표시

SELECT userID, groupName, SUM(price*amount) 
FROM buyTbl
GROUP BY ROLLUP(groupName, userID);
-- userID가 아닌 num으로 하는 이유는 중복되는
-- userID가 있어 그룹핑 되기 때문에 모든항목이 나타나지 않는다.
-- 즉, userID인 BBK가 2개이면 2개가 더해진 값으로 출력된다.

SELECT num, groupName, SUM(price*amount) 
FROM buyTbl
GROUP BY ROLLUP(groupName, num);

 

첫번째는 groupName을 고정하고 정렬, 두번째는 userID를 고정하고 정렬한 값이다.

 

CUBE()

CREATE TABLE cubeTbl(prodName NCHAR(3), color NCHAR(2), amount INT);
GO
INSERT INTO cubeTbl VALUES('컴퓨터', '검정', 11);
INSERT INTO cubeTbl VALUES('컴퓨터', '파랑', 22);
INSERT INTO cubeTbl VALUES('모니터', '검정', 33);
INSERT INTO cubeTbl VALUES('컴퓨터', '파랑', 44);
GO
SELECT prodName, color, SUM(amount) AS [수량합계]
FROM cubeTbl
GROUP BY CUBE (color, prodName);