2012-05-03 5 views
2

2 가지 범주의 범위를 결정하고 싶습니다. 카테고리 A와 카테고리 B를 A는 B가 다시 다음 16에서 31로 시작은 1에서 A 류 내게 범위를 제공이 쿼리SQL 데이터 범위 최소 최대 범주

select min(range), max(range) 
from table 
group by category 
order by category 

을 실행하면 이제 40 32에서 시작, 1에서 15로 시작 40, B 카테고리는 16에서 31까지입니다. 범위를 뚫고 결과를보고 싶습니다.

Category A 1 to 15 
Category B 16 to 31 
Category A 32 to 40 

어떻게하면됩니까? 제 3 칼럼이 필요한가요? 나는 새로운 카테고리가있는 세 번째 컬럼이 있다면 각각 C D E라고 말하면서 그룹화하고 결과를 얻을 수 있습니다. 그러나 나는 그것을 어떻게하는지 모른다.

도와주세요.

감사 -Adeel

+0

어떤 RDBMS를 사용하고 있습니까? –

+0

적절한 범위를 결정할 때 사용하는 기준은 무엇입니까? 특히 범위가 반드시 정수의 순서입니까? 즉, 첫 번째 범위에 "8"이 누락 된 경우 하나의 범위 또는 두 개가됩니까? –

답변

1

당신이 연속 정수로 구성된 그룹으로 카테고리를 파괴하려고하는 것을 가정하면, 그 다음은 작동합니다

select category, diff, min(range), max(range) 
from 
(
    select category, range, 
     (range - row_number() over (partition by category order by range)) as diff 
    from table 
) t 
group by category 
order by 1, 3 

이 쿼리는 관찰을 기반으로 그 범주에 대해 주어진 그룹 내에서의 숫자는 순차적으로 증가합니다. 따라서 정수 시퀀스를 빼면 상수가 생겨 특정 범위를 식별하는 데 사용할 수 있습니다.

Row_Number()은 표준 SQL 함수이므로 대부분의 데이터베이스에서 사용할 수 있습니다.

+0

안녕하세요 고든. 이것은 아주 좋은 예이며, 지금 시도해보고 알려 드리겠습니다. – Mozung

+0

고든, 방금 코드를 시험해 보니 매력처럼 작동했습니다. 나는 너무 행복해. : D – Mozung

+0

대단히 감사합니다! – Mozung

0

그것은 당신을 위해 일해야 recursive CTE처럼 들리지만,이 작업을 수있는 방법에 RDBMS에 따라 달라집니다 (그리고 심지어 지원하는 경우)하지만, 당신은 아마 일종의을 할 수 최대 한도까지 각 조각에 대한 배율로 사용할 수있는 증분 계수. RDBMS를 알려 주시면 예제를 제공해 드리겠습니다.

+0

안녕하세요 저스틴, CTE가 허용되며 이것들을 처리 할 수 ​​있습니다. 저에게보기를주십시오. 감사합니다 – Mozung

관련 문제