[SQL] ROW_NUMBER와 별개의 SQL 쿼리
SQLROW_NUMBER와 별개의 SQL 쿼리
나는 SQL의 독특한 키워드로 싸우고있다. 난 그냥 열에 & I 시도 있도록 독특한 (별개의) 값의 모든 행 번호를 표시하려면 :
SELECT distinct id, ROW_NUMBER() OVER (ORDER BY id) AS RowNum
FROM table
where fid = 64
그러나 아래의 코드는 나에게 고유 한 값을 제공 :
SELECT distinct id FROM table where fid = 64
그러나 경우에 ROW_NUMBER 그것을 시도했다. 다음은 작동하지 않습니다.
해결법
-
==============================
1.이 옵션을 사용합니다 :
이 옵션을 사용합니다 :
SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM (SELECT DISTINCT id FROM table WHERE fid = 64) Base
다른의 "입력"등의 쿼리의 "출력"을 넣어.
CTE를 사용 :
; WITH Base AS ( SELECT DISTINCT id FROM table WHERE fid = 64 ) SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM Base
두 쿼리는 동등해야한다.
기술적으로 당신은 할 수
SELECT DISTINCT id, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS RowNum FROM table WHERE fid = 64
당신이 DISTINCT 필드의 수를 증가하는 경우, 당신은 예를 들어 그래서, 파티션 BY의 모든 필드를 넣어야 할
SELECT DISTINCT id, description, ROW_NUMBER() OVER (PARTITION BY id, description ORDER BY id) AS RowNum FROM table WHERE fid = 64
나는 심지어 DISTINCT가에 쓸모가있을 것이다, 그래서 일부는 / UNION ALL을 조인 쿼리를 결합하지 않는 한, ID가 아마, 정의에 의해 때문에 고유의 기본 키,해야 당신이 여기에 표준 명명 규칙에 대해려고하고 있다는 것을 이해 바랍니다 .. .
-
==============================
2.이것은 당신이 이미 가까운 꽤 있었다 매우 간단 할 수 있습니다
이것은 당신이 이미 가까운 꽤 있었다 매우 간단 할 수 있습니다
SELECT distinct id, DENSE_RANK() OVER (ORDER BY id) AS RowNum FROM table WHERE fid = 64
-
==============================
3.이 문서 ROW_NUMBER ()와 DENSE_RANK () (랭크 () 함수는 특별히 처리되지 않음) 간의 흥미로운 관계를 다룬다. 당신이 SELECT DISTINCT 문에 발생 ROW_NUMBER ()를 필요로 할 때 그들이 DISTINCT 키워드 제거하기 전에 ROW_NUMBER ()는 고유 한 값을 생성합니다. 예를 들면 이 쿼리
이 문서 ROW_NUMBER ()와 DENSE_RANK () (랭크 () 함수는 특별히 처리되지 않음) 간의 흥미로운 관계를 다룬다. 당신이 SELECT DISTINCT 문에 발생 ROW_NUMBER ()를 필요로 할 때 그들이 DISTINCT 키워드 제거하기 전에 ROW_NUMBER ()는 고유 한 값을 생성합니다. 예를 들면 이 쿼리
SELECT DISTINCT v, ROW_NUMBER() OVER (ORDER BY v) row_number FROM t ORDER BY v, row_number
...이 결과를 (DISTINCT는 효과가 없습니다) 생산 수 있습니다
+---+------------+ | V | ROW_NUMBER | +---+------------+ | a | 1 | | a | 2 | | a | 3 | | b | 4 | | c | 5 | | c | 6 | | d | 7 | | e | 8 | +---+------------+
이 쿼리 반면 :
SELECT DISTINCT v, DENSE_RANK() OVER (ORDER BY v) row_number FROM t ORDER BY v, row_number
... 당신은 아마이 경우 원하는 생산 :
+---+------------+ | V | ROW_NUMBER | +---+------------+ | a | 1 | | b | 2 | | c | 3 | | d | 4 | | e | 5 | +---+------------+
DENSE_RANK () 함수의 ORDER BY 절은 제대로 작동하려면 SELECT DISTINCT 절에서 다른 모든 열을 필요합니다.
PostgreSQL을 /베이스 / SQL 표준 구문 (WINDOW 절)를 사용하여 :
SELECT v, ROW_NUMBER() OVER (window) row_number, RANK() OVER (window) rank, DENSE_RANK() OVER (window) dense_rank FROM t WINDOW window AS (ORDER BY v) ORDER BY v
... 당신은 얻을 것이다:
+---+------------+------+------------+ | V | ROW_NUMBER | RANK | DENSE_RANK | +---+------------+------+------------+ | a | 1 | 1 | 1 | | a | 2 | 1 | 1 | | a | 3 | 1 | 1 | | b | 4 | 4 | 2 | | c | 5 | 5 | 3 | | c | 6 | 5 | 3 | | d | 7 | 7 | 4 | | e | 8 | 8 | 5 | +---+------------+------+------------+
-
==============================
4.이 필드를 추가하고 또한 당신의 선택의 문제를 마스크 수있는 DISTINCT 원인 문제를 사용. 이 같은 대안으로 사용 GROUP BY :
이 필드를 추가하고 또한 당신의 선택의 문제를 마스크 수있는 DISTINCT 원인 문제를 사용. 이 같은 대안으로 사용 GROUP BY :
SELECT id ,ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM table where fid = 64 group by id
그럼 당신은이 같이 당신의 선택에서 다른 흥미로운 정보를 추가 할 수 있습니다 :
,count(*) as thecount
또는
,max(description) as description
-
==============================
5.어떻게 같은 약
어떻게 같은 약
;WITH DistinctVals AS ( SELECT distinct id FROM table where fid = 64 ) SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM DistinctVals
당신은 또한 시도 할 수
SELECT distinct id, DENSE_RANK() OVER (ORDER BY id) AS RowNum FROM @mytable where fid = 64
-
==============================
6.이 시도:
이 시도:
;WITH CTE AS ( SELECT DISTINCT id FROM table WHERE fid = 64 ) SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM cte WHERE fid = 64
-
==============================
7.이 시도
이 시도
SELECT distinct id FROM (SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM table WHERE fid = 64) t
또는 대신 행 번호의) RANK를 (사용 기록을 DISTINCT 순위를 선택
SELECT id FROM (SELECT id, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS RowNum FROM table WHERE fid = 64) t WHERE t.RowNum=1
이것은 또한 고유 한 ID를 반환
from https://stackoverflow.com/questions/18121130/sql-query-distinct-with-row-number by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server 관리 Studio에서 스크립트를 생성 (0) | 2020.04.26 |
---|---|
[SQL] 오라클 널 (null) == null이 결정 (0) | 2020.04.26 |
[SQL] 무결성 제약 조건 위반 : 1452 추가 또는 자식 행을 업데이트 할 수 없습니다 : (0) | 2020.04.26 |
[SQL] 오라클 SQL 이스케이프 문자 ( '&'A에 대한) (0) | 2020.04.26 |
[SQL] "경우가 존재 삽입 또는 업데이트"SqlBulkCopy의 할 수있는 방법? (0) | 2020.04.26 |