본문 바로가기

공책

SQL 밀어넣기 & 중복데이터 확인

반응형


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