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
운영게시판
최근게시물
MS-SQL Q&A 4432 게시물 읽기
No. 4432
순위 쿼리에서 소트를 하지 않는 방법은?
작성자
김민식(mspower)
작성일
2008-09-01 10:20
조회수
5,534

아래 처럼 쿼리 작성하여 테스트 해서 정상 순위가 작성됩니다만,  최종 결과 쿼리에서 Order by Rank 없이 순위 별로 출력할 방법이 없나요?

Data 필드 항목의 인덱스를 ASC, DESC 어떤걸로 하여도 Data 값이 작은 것부터 출력이 되네요.

도움 부탁드립니다.

CREATE DATABASE TestDB
GO

USE TestDB
GO

CREATE TABLE Sample1
(
 Seq INT identity,
 Data INT
)
GO

CREATE INDEX idx_data ON Sample1(Data)
GO

/* 샘플 데이터 만들기 */
DECLARE
 @Data INT,
 @Count INT

SET NOCOUNT ON
SET @Count = 0
WHILE(@Count < 200000)
BEGIN
 INSERT INTO Sample1(Data) VALUES(CAST(RAND() * 100 AS INT))
 SET @Count = @Count + 1
END
GO


/*
 순위 쿼리

 Data 의 인덱스를 ASC 또는 DESC 로 하여도 Data 값이 작은 순서로 결과가 출력된다.
 큰 순서로 출력하도록 한다면 하단 쿼리중 ORDER BY RANK 를 사용한 소트를 할 필요가 없을텐데.....
*/

SELECT
 Data ,
 (
  SELECT COUNT(*) + 1 FROM Sample1 WHERE Data > A.Data
 ) AS RANK
FROM
 Sample1 AS A
ORDER BY RANK  <-- 요걸 빼고 싶어요....
GO


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

인덱스는 고칠 필요 없을 것 같구요.

질문의 내용 상 맨 마지막 Sort에서 


ORDER BY RANK


ORDER BY RANK DESC

의 차이를 원하시는 것 아닌가요?

성시현(finecomp)님이 2008-09-01 16:24에 작성한 댓글입니다.

Data 값이 큰 것이 순위가 높을것으로 하고 있습니다. 그러므로 Data 필드에 인덱스가 있다면

해당 인덱스의 ASC, DESC 에 따라 순서대로 또는 역순으로 출력되길 기대하는데요.

이상하게 ORDER BY RANK 를 주지 않으면, 

정렬되지 않은 결과가 나오네요..

더욱 이상한 것은 샘플 데이터의 건수에 따라 소트된 결과로 보이기도 하고, 

흩어진 결과로도 나옵니다. 

ORDER BY RANK 를 사용하지 않고, 제가 올린 쿼리중 샘플데이터 건수를 임의 조정해서 

쿼리 결과를 확인해보면 그렇습니다.

넘 이상해요..^^
김민식(mspower)님이 2008-09-01 17:14에 작성한 댓글입니다.

원인을 찾았습니다.

데이터 상태(인덱스 상태. 분포도)에 따라 디비 옵티마이저가 인덱스의 사용 유무를 판단하고 있네요.

제가 원하는것은 소트된 결과인데...

그래서 쿼리문에 강제 힌트를 주어야 하네요...^^

SELECT
 Data ,
 (
  SELECT COUNT(DATA) + 1 FROM Sample1 WHERE Data > A.Data
 ) AS RANK
FROM
 Sample1 AS A
WITH (INDEX(idx_DAta))  <--- 요렇게 강제로 인덱스를 타도록 하니 만족할 만한 결과가 나오네요. 소트를 하지 않게..^.^

댓글 주셔서 감사합니다.

김민식(mspower)님이 2008-09-01 17:39에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4435한글이 깨집니다.
김홍원
2008-09-03
5255
4434access delete 구문에서 [2]
초보
2008-09-02
5109
4433Access에서 update 구문... [1]
최재환
2008-09-02
5004
4432순위 쿼리에서 소트를 하지 않는 방법은? [3]
김민식
2008-09-01
5534
4430IDENTITY 속성이 있는 MS-SQL에 엑셀파일로 자료입력 [2]
초보자..
2008-08-30
5379
4429ms-sql 데이타베이스 연결오류
jaguar
2008-08-29
6432
4428sqlserver의 메모리 증가 문제...원인파악 [1]
임철수
2008-08-29
6476
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다