728x90
서브 쿼리(sub query)
상위 50%만 출력
select * from(
(select mem_userid, mem_name, mem_gender, mem_point,
percent_rank() over(partition by mem_gender order by mem_point desc) * 100 as top from tb_member where extract(year from mem_regdate) = 2021
)
) where top <= 50
tb_order에서 데이터를 가져와 tb_point에 데이터를 입력하는 쿼리를 만들어보자
tb_point
po_idx 일련번호
po_userid 'apple'
po_memo 이유('구입')
po_point 포인트 (order 데이터의 ord_price * 0.05)
po_ordno 주문번호
po_regdate 현재 날짜
point 테이블 생성
create table tb_point (
po_idx number not null,
po_userid varchar2(20) not null,
po_memo varchar2(50) not null,
po_point number(7) default 0,
po_ordno varchar2(8) unique not null,
po_regdate date default sysdate,
constraint fk_point_userid foreign key(po_userid) references tb_member(mem_userid),
constraint fk_point_ordno foreign key(po_ordno) references tb_order(ord_no)
);
포인트 시퀀스 생성
create sequence seq_point
increment by 1
start with 1;
서브쿼리 이용한 데이터 삽입(구입자 아이디, 포인트 지급이유, 주문번호는 지정)
insert into tb_point (po_idx, po_userid, po_memo, po_point, po_ordno)
values (seq_point.nextval, 'apple', '구입',
(select ord_price from tb_order where ord_no='00000001') * 0.05, '00000001');
728x90
'SQL > Oracle' 카테고리의 다른 글
[Oracle] union, union all (0) | 2022.06.16 |
---|---|
[Oracle] Oracle 함수 (0) | 2022.06.16 |
[Oracle] 커서(cursor) (0) | 2022.06.16 |
[Oracle] 트랜젝션(transaction) (0) | 2022.06.16 |
[Oracle] 프로시저 예제 (0) | 2022.06.16 |