이번 글에서는
GROUP BY 문법에 대해서 알아보고
관련된 문제를 풀어보겠습니다.
CREATE DATABASE testdb;
USE testdb;
DROP TABLE IF EXISTS member;
DROP TABLE IF EXISTS product;
CREATE TABLE member(
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
member_id VARCHAR(30),
name VARCHAR(10),
address VARCHAR(10),
phone_number VARCHAR(20),
create_date datetime,
update_date datetime
);
CREATE TABLE product(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
qty INT,
price INT,
create_date datetime,
update_date datetime
);
INSERT INTO `testdb`.`member`
( `member_id`, `name`, `address`, `phone_number`, `create_date`, `update_date`)
VALUES
('member1', 'A', 'Seoul', '010-1111-1111', NOW(), NOW()),
('member2', 'B', 'Seoul', '010-1111-2222', NOW(), NOW()),
('member3', 'C', 'Daegu', '010-1111-3333', NOW(), NOW()),
('member4', 'D', 'Daegu', '010-1111-4444', NOW(), NOW()),
('member5', 'D', 'Daegeon', '010-1111-5555', NOW(), NOW()),
('member6', 'E', 'Daegeon', '010-2222-1111', NOW(), NOW()),
('member7', 'F', 'Daegeon', '010-2222-1111', NOW(), NOW()),
('member8', 'F', 'Seoul', '010-2222-2222', NOW(), NOW());
INSERT INTO `testdb`.`product`
(`name`, `qty`, `price`, `create_date`, `update_date`)
VALUES
('carrot', 10, 1000, NOW(), NOW()),
('apple', 100, 500, NOW(), NOW()),
('pear', 30, 800, NOW(), NOW()),
('orange', 50, 800, NOW(), NOW()),
('honey', 10, 3000, NOW(), NOW()),
('cabage', 15, 3000, NOW(), NOW()),
('pine', 20, 5000, NOW(), NOW()),
('mellon', 10, 10000, NOW(), NOW());
SQL에서 특정 컬럼의 값을 기준으로
집계함수 SUM, AVG, COUNT, MAX, MIN
를 사용하기 위해서는
FROM 절 뒤에
GROUP BY '집계함수 기준 컬럼' 를 붙여줘야 합니다.
예) '컬럼1'의 값을 기준으로 그룹화한 후,
각 그룹 내에서 '컬럼2' 값들의 합을 구함.
SELECT SUM('컬럼2') FROM '테이블' GROUP BY '컬럼1'
product 테이블에 있는 모든 가격의 총합을 가져옵니다.
proudct 테이블에 있는 과일 갯수(qty)의 평균치를 구합니다.
proudct 테이블에서 qty에 대응되도록 price의 갯수를 가져옵니다.
SELECT
SUM(price)
FROM
product;
SELECT
AVG(qty)
FROM
product;
SELECT
qty,
COUNT(price),
FROM
product
GROUP BY qty;