insert into h_pr_train
select pt_gubun, pt_sno, pt_content, pt_sdate, pt_edate, pt_time, pt_elocation, pt_inuser,
pt_indate,
pt_elocation2, pt_hangub,
convert(money,pt_jiwon) as pt_jiwon,
convert(money,pt_eamt) as pt_eamt,
pt_gradu, pt_hcheck, pt_lcheck from jrtemp_edu3
--중복찾기-----------------------------------------------------------
select
a.*
from h_pr_train a,
(
select pt_sno,pt_sdate from h_pr_train
group by pt_sno,pt_sdate
having count(pt_sno) > 1
) b
where a.pt_sno = b.pt_sno
and a.pt_sdate = b.pt_sdate
--예제
select pt_sno,pt_sdate,count(pt_sno) from h_pr_train
group by pt_sno,pt_sdate
중복된 값을 하나로 표시하고 카운트 함수 로 중복된 값표기 .
============================HAVING ======예제 및 사용예 설명
SELECT column1, SUM(column2)
FROM "list-of-tables"
GROUP BY "column-list"
HAVING "condition";
HAVING 절은 각 그룹별로 조건을 지정할 수 있게 해 준다. 즉, 사용자가 지정한 조건에 따라서
어떤 레코드를 조회할 것인지 결정 된다. HAVING 절은 GROUP BY 절 다음에 나와야 한다.
HAVING 절을 이해하려면 예제를 보는 편이 빠르다. 직원의 name, department, salary, age를
저장하고 있는 employee 테이블이 있다고 하자. 각 부서별로 직원들의 평균 급여를 구하고자
한다면 다음과 같이 실행하면 된다.
SELECT dept, avg(salary)
FROM employee
GROUP BY dept;
만약 평균 급여가 20000 이상인 경우에 대해서만 조회하고 한다면 :
SELECT dept, avg(salary)
FROM employee
GROUP BY dept
HAVING avg(salary)>=20000;
<실습에 사용되는 테이블>
items_ordered
customerid
order_date
item
quantity
price
10330
30-Jun-1999
Pogo stick
1
28
10101
30-Jun-1999
Raft
2
58
10298
01-Dec-1999
Skateboard
1
33
10101
01-Jul-1999
Life Vest
4
125
10299
06-Sep-1999
Parachute
1
1250
10339
27-Jul-1999
Umbrella
3
5
10449
13-Aug-1999
Unicycle
1
181
연습 문제
(주의 : GROUP BY 절의 연습 문제와 유사하지만 여기서는 HAVING 절을 사용해야 한다)
customers 테이블에서 최소한 1명 이상이 살고 있는 주(state)의 고객 수는 각각
몇 명인가? 고객 수가 1명 이상인 경우에 대해서 각 주와 고객 수를 출력하라.
items_ordered 테이블에서 각 item 별로 item, 최고 가격, 최저가격을 조회하라.
단, 최고 가격이 190.00 이상인 경우만을 출력해야 한다.
각 고객이 주문한 건수는? items_ordered 테이블을 사용하여 1건 이상 주문한 경우에
대해서 customerid, 주문 건수, 주문 총액을 조회하라.
도움이 필요하면 아래의 연습 문제 해답을 참조하기 바란다.
HAVING 연습 문제 해답
문제 #1
SELECT state, count(state)
FROM customers
GROUP BY state
HAVING count(state) >= 1;
문제 #2
SELECT item, max(price), min(price)
FROM items_ordered
GROUP BY item
HAVING max(price) >= 190.00;
문제 #3
SELECT customerid, count(customerid), sum(price)
FROM items_ordered
GROUP BY customerid
HAVING count(customerid) >= 1;
----------------------------------------
select opno,max(condate) from 상단
GROUP BY opno
중복된 값 opno 중에 날짜가 큰값만 조회
'공책' 카테고리의 다른 글
일단어 . 정리중~ (1) | 2009.11.19 |
---|---|
비스타 / 윈도우7 모든 권한 부여하기 . (0) | 2009.11.17 |
SQL테이블 복사 날로 먹기 (0) | 2009.08.12 |
무료 PC 단어장 (0) | 2009.05.26 |
학습자 등록 학정인정 일자 (0) | 2009.01.30 |