[SQL] 5 세트로 그룹 행
SQL5 세트로 그룹 행
Col1
----------
1
2
3
4....all the way to 27
나는 5의 그룹 번호를 할당하는 두 번째 열을 추가 할 수 있습니다.
Col1 Col2
----- ------
1 1
2 1
3 1
4 1
5 1
6 2
7 2
8 2...and so on
제 6 회 그룹은 2 개 행이 있어야합니다.
NTILE은 정수로 나누어없는 경우 방식 NTILE이 그룹을 핸들하기 때문에 내가 원하는 것을 달성하지 않습니다.
파티션의 행수가 integer_expression의 배수가 아닌 경우, 이것은 하나의 부재로 두 가지 크기의 차이가 그룹을 일으킬 것이다. 큰 그룹은 OVER 절에 지정된 순서로 작은 그룹 전에 온다. 예를 들어, 행의 총 수는 53이며, 그룹의 수는 세 그룹 제 11 개 행이되며, 나머지 두 그룹은 10 개의 행을 각각 가질 것이다 다섯이면. 행의 수는 그룹의 개수로 나누어 한편 경우 행 고르게 그룹 분산된다. 행의 총 수는 50이고, 5 개 그룹이있는 경우, 예를 들어, 각각의 버킷 (10 개)의 행을 포함 할 것이다.
이것은 명확하게 SQL 바이올린에서 입증된다. 나머지는 좀 그들이 긴지고 있었다 나는 이것이 하나의 라인에서 수행 될 수 있다는 내가 뭔가 빠진 것 같은 느낌이 어떤 해결책을 시작했지만 한 5있는 동안 그룹 4, 5, 6은 각각 4 개 행을 가지고있다.
해결법
-
==============================
1.당신은이를 사용할 수 있습니다 :
당신은이를 사용할 수 있습니다 :
;WITH CTE AS ( SELECT col1, RN = ROW_NUMBER() OVER(ORDER BY col1) FROM TableA ) SELECT col1, (RN-1)/5+1 col2 FROM CTE;
샘플 데이터에서 COL1은 (그것이 INT의 경우)) (ROW_NUMBER를 사용하지 않고 직접 사용할 수 있도록, 차이가없는 상관 관계이다. 그러나이 아니라고 경우,이 대답은 너무 작동합니다. 다음은 수정 된 sqlfiddle입니다.
-
==============================
2.수학의 비트 먼 길을 갈 수 있습니다. 모든 값에서 1을 뺀 여기서 이전 그룹에 5S (에지의 경우)를두고, 그 다음에 6 개있다. 그룹의 크기에 의해 분할을 바닥과 하나가 당신이 찾고있는 결과를 제공 추가. 또한, SQLFiddle 예를 들어 여기에 반복 삽입을 수정 - 테이블은 27까지 갔다.
수학의 비트 먼 길을 갈 수 있습니다. 모든 값에서 1을 뺀 여기서 이전 그룹에 5S (에지의 경우)를두고, 그 다음에 6 개있다. 그룹의 크기에 의해 분할을 바닥과 하나가 당신이 찾고있는 결과를 제공 추가. 또한, SQLFiddle 예를 들어 여기에 반복 삽입을 수정 - 테이블은 27까지 갔다.
SELECT col1, floor((col1-1)/5)+1 as grpNum FROM tableA
from https://stackoverflow.com/questions/25436141/group-rows-into-sets-of-5 by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 전체는 MS 액세스에 가입 (0) | 2020.07.15 |
---|---|
[SQL] 어떻게 하루에 1 개 이상의 레코드를 선택하려면? (0) | 2020.07.15 |
[SQL] 오라클 SQL 구문 : 인용 식별자 (0) | 2020.07.15 |
[SQL] 오늘 날짜를 기준으로 이전 월요일 및 이전 일요일의 날짜 (0) | 2020.07.15 |
[SQL] SSIS에서 여러 열로 쉼표 구분 기호와 데이터의 단일 열을 분할 (0) | 2020.07.15 |