[SQL] SYSDATE, SUM, MAX, MIN, GROUP BY, VALUES

  • SYSDATE: 현재 날짜와 시간을 반환해 입력 또는 비교 시점 기준의 날짜로 사용
  • TO_DATE('YYYY-MM-DD'): 문자열을 날짜 형식으로 변환하여 날짜 비교나 삽입에 사용
  • SUM(): 그룹 또는 전체 데이터를 합산할 때 사용 (총합 계산)
  • MAX(): 해당 컬럼의 최대값을 반환하여 가장 큰 값 찾거나 새로운 값 계산 시 사용
  • MIN(): 해당 컬럼의 최소값을 반환하여 가장 큰 값 찾거나 새로운 값 계산 시 사용
  • IN (...): 여러 조건을 한 번에 비교할 때 사용 (ex. WHERE deptno IN (10, 30)
  • GROUP BY: 특정 컬럼을 기준으로 집계 함수(SUM, COUNT 등)를 그룹화하여 계산할 때 사용
  • DEFAULT SYSDATE: 컬럼에 값이 입력되지 않을 경우 자동으로 현재 날짜가 입력되도록 설정
  • VALUES: INSERT 구문에서 새로운 레코드를 삽입할 때 사용하는 키워드

 

 

/*
1.emp_work2 테이블을 생성하면서 emp, 테이블의 10, 30번 부서 사원정보를 조회하여 추가하세요.
단, 사원 번호는 조회된 사원번호에 1000을 더한 값으로 추가되어야합니다.
예) emp 테이블의 사원번호가 7788이라면, emp_work2에는 8788로 추가되어야합니다.
*/
SELECT empno + 1000
as empno, ename, job, mgr, hiredate, sal, comm, deptno
FROM emp
WHERE deptno IN (10, 30);


/*
2. emp_work2 테이블에서 10번 부서에 근무하는 사원들의 연봉을 emp 테이블의 사원번호가
7698 사원의 연봉과 7782 사원의 연봉을 합산한 금액으로 변경하세요.
*/

UPDATE emp_work2
SET sal = (SELECT SUM(sal) FROM emp WHERE empno IN (7698, 7782))
WHERE deptno = 10;

select * from emp_work2;


/*
3. emp_work2 테이블에 아래와 같은 레코드를 추가하세요.(나머지는 null이 입력되어야합니다.)
사원번호: : emp_work2의 가장 마지막 사원번호보다 1증가한 사원 번호,
사원명 : '홍길동, 직무: 개발자, 입사일 : 레코드가 추가되는 시점의 날짜
*/

INSERT INTO emp_work2 (empno, ename, job, hiredate)
SELECT (MAX(empno) + 1), '홍길동', '개발자', SYSDATE
FROM emp_work2;

select * from emp_work2;


/*
4. 아래와 같은 레코드를 저장할 수 있는 sales 테이블을 생성하고 레코드를 추가하세요.
번호: 1, 상품명 : 키보드, 가격: 20000, 판매일 2025-03-10 수량 : 1
번호: 2, 상품명 : 마우스, 가격: 15000,판매일 2025-03-10, 수량:2
번호: 3, 상품명 : 모니터, 가격: 250000, 판매일 2025-03-10 수량 : 1
번호: 4, 상품명 : 키보드, 가격: 20000, 판매일 2025-03-11 수량 : 3
번호: 5, 상품명 : 키보드, 가격: 20000, 판매일 2025-03-11, 수량:2
번호: 6, 상품명 : 마우스, 가격: 15000, 판매일 2025-03-11, 수량:1
번호: 7, 상품명 : 모니터, 가격: 260000, 판매일 2025-03-12, 수량:2
번호: 8, 상품명: 키보드, 가격: 20000, 판매일 2025-03-12, 수량:1
번호 : 9, 상품명 : 마우스, 가격 : 15000,판매일 2025-03-12, 수량:2
번호: 10, 상품명: 키보드, 가격: 20000, 판매일 2025-03-12, 수량:1
번호: 11, 상품명: 마우스, 가격 : 15000, 판매일 2025-03-12 수량 : 4
*/

CREATE TABLE sales (
    id NUMBER PRIMARY KEY,
    product_name VARCHAR2(50),
    price NUMBER,
    sale_date DATE,
    quantity NUMBER
);

 

insert into sales (id,product_name,price,sale_date,quantity)
values (1,'키보드',20000,TO_DATE('2025-03-10','YYYY-MM-DD'),1);
insert into sales (id,product_name,price,sale_date,quantity)
values (2,'마우스',15000,TO_DATE('2025-03-10','YYYY-MM-DD'),2);
insert into sales (id,product_name,price,sale_date,quantity)
values (3,'모니터',250000,TO_DATE('2025-03-10','YYYY-MM-DD'),1);
insert into sales (id,product_name,price,sale_date,quantity)
values (4,'키보드',20000,TO_DATE('2025-03-11','YYYY-MM-DD'),3);
insert into sales (id,product_name,price,sale_date,quantity)
values (5,'키보드',20000,TO_DATE('2025-03-11','YYYY-MM-DD'),2);
insert into sales (id,product_name,price,sale_date,quantity)
values (6,'마우스',15000,TO_DATE('2025-03-11','YYYY-MM-DD'),1);
insert into sales (id,product_name,price,sale_date,quantity)
values (7,'모니터',260000,TO_DATE('2025-03-12','YYYY-MM-DD'),2);
insert into sales (id,product_name,price,sale_date,quantity)
values (8,'키보드',20000,TO_DATE('2025-03-12','YYYY-MM-DD'),1);
insert into sales (id,product_name,price,sale_date,quantity)
values (9,'마우스',15000,TO_DATE('2025-03-12','YYYY-MM-DD'),2);
insert into sales (id,product_name,price,sale_date,quantity)
values (10,'키보드',20000,TO_DATE('2025-03-12','YYYY-MM-DD'),1);
insert into sales (id,product_name,price,sale_date,quantity)
values (11,'마우스',15000,TO_DATE('2025-03-12','YYYY-MM-DD'),4);
commit;

 


/*
5. 상품명, 총가격, 판매건수, 판매일, 입력일을 저장할 수 있는
sales adjustment테이블을 생성하세요.
*/

CREATE TABLE sales_adjustment (
    product_name VARCHAR2(50),
    total_price NUMBER,
    sales_count NUMBER,
    sale_date DATE,
    created_at DATE DEFAULT SYSDATE
);

select * from sales_adjustment;


/*
6. sales 테이블에서 '2025-03-12' 에 판매된 상품의 상품명, 총가격, 판매건수를 집계하여
sale adjustment 테이블에 추가하세요. (정산 쿼리)
추가예)
키보드, xxxx, 2, 정산시점의 날짜
마우스, xxxx, 2, 정산시점의 날짜
모니터, xxxx, 2, 정산시점의 날짜
*/

INSERT INTO sales_adjustment (product_name, total_price, sales_count, sale_date, created_at)
SELECT product_name, SUM(price * quantity) as total_price, SUM(quantity) as sale_count, sale_date, SYSDATE
FROM sales
WHERE sale_date = '2025-03-12'
GROUP BY product_name, sale_date;

-- 추가 예 (예제 결과)
INSERT INTO sales_adjustment (product_name, total_price, sales_count, sale_date, created_at)
VALUES ('키보드', 40000, 2, TO_DATE('2025-03-12', 'YYYY-MM-DD'), SYSDATE);
INSERT INTO sales_adjustment (product_name, total_price, sales_count, sale_date, created_at)
VALUES ('마우스', 30000, 2, TO_DATE('2025-03-12', 'YYYY-MM-DD'), SYSDATE);
INSERT INTO sales_adjustment (product_name, total_price, sales_count, sale_date, created_at)
VALUES ('모니터', 520000, 2, TO_DATE('2025-03-12', 'YYYY-MM-DD'), SYSDATE);
commit;

select * from sales_adjustment;

'SQL Oracle' 카테고리의 다른 글

[SQL] PRIMARY & FOREIGN KEY, UNIQUE, NOT NULL, NVL  (0) 2025.04.14
[SQL] to_char, instr, substr, length, initcap, as  (0) 2025.04.10
[SQL] CRUD  (0) 2025.04.08
[SQL] Oracle 환경 설정  (1) 2025.04.07