database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 5006 게시물 읽기
No. 5006
SQL 쿼리문 하나 만들려고 하는데... 잘 안되네여... T_T
작성자
윤병훈(peteryun)
작성일
2003-10-17 01:59
조회수
1,403

안녕하세요...
제가 sql 쿼리문을 만들려고 합니다.

  ID      POS
==============
 aaa      A1
 bbb      B1
 ccc      B1
 ddd      C1
 eee      A1
 fff         D1

이걸 다음과 같이 출력하고자 합니다.

  ID      POS
==============
 aaa      A1
 eee      A1
 bbb      B1
 ccc      B1

즉 POS 값에 속한 ID 가 2이상인 경우 출력 하고자 합니다...
group by 써서 갯수를 구하는 것까지는 알겠는데...
그 그룹에 속한 내용을 모두 출력하려고 하니 난감하네여...
그룹이 2그룹 이상이니 subselect 도 못쓰고...
고수님들... 도와주세여...
감사합니다.

이 글에 대한 댓글이 총 2건 있습니다.

group by ... having 구문과 그것의 inline view로 처리하면 되겠네요.

 

mydb=# select a.id, a.pos 
from table1 a,
     (select pos from table1 
       group by pos having count(*) > 1) b
where a.pos = b.pos
order by a.pos,a.id;
 id  | pos
-----+-----
 aaa | A1
 eee | A1
 bbb | B1
 ccc | B1
(4 rows)
Time: 3.62 ms

 

좀더 심도 깊게,

여기서 group by ... having 의 결과가 비교적 작다면(많아도 10건 미만), 그리고, pos 칼럼으로 인덱스를 만들어 두었다면, 위와 같이 inline view 방식보다는 pos in (select ...) 방식이 비용이 적게 들겝니다.

 

select id, pos 
from table1 
where pos in 
(select pos from table1 
   group by pos having count(*) > 1)
order by pos, id

 

그 반대로 having 결과가 많다면(적어도 수백건 이상이라면) 윗 inline view 방식이 in (select ...) 방식 보다는 비용이 적게 들겝니다.

 

또한 이 문제는 self join으로 해결 할 수도 있습니다. 비용은 윗 inline view 방식과 비용이 비슷할 듯싶네요. 아무튼 쿼리문은 다음과 같습니다.

select a.id, a.pos 
from table1 a, table1 b 
where a.pos = b.pos
group by a.id,a.pos
having count(a.pos) > 1
order by a.pos, a.id

 

이 방식이 가능 하다는 정도만 알고 계셔도 괜찮을 것같습니다. 쿼리 가독성이 떨어져서 잘 사용되지 않는 구문입니다. 그래도, inline view 방식보다는 지저분하지는 않지요? :)

김상기(ioseph)님이 2003-10-17 02:57에 작성한 댓글입니다.

정말 감사드립니다...

잘 되는군여... 이제 잘 수 있을듯... ^^;;;

 

윤병훈(peteryun)님이 2003-10-17 04:43에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
5009jdbc 연결시 다음과 같은 에러가 나는군요 . 고수님들의 가름침을? [3]
관광소~주
2003-10-20
1466
5008트리거프로시져 질문입니다. [1]
Agustin
2003-10-20
1852
5007포스터에서 순위를 구할려고 합니다.[질문수정] [4]
졸리
2003-10-19
3257
5006SQL 쿼리문 하나 만들려고 하는데... 잘 안되네여... T_T [2]
윤병훈
2003-10-17
1403
5005동시접속자수가 최고 20명 까지 입니다! 환경설정을 어떻게? [2]
박근준
2003-10-16
1480
5004덤프하면 한글이 이상하게 나오네요. [1]
김명호
2003-10-16
1480
5003여러개의 Database 에 대한 문의 [2]
황수진
2003-10-16
1583
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다