2016-08-22 2 views
0

에 의해 난 내가그룹 하위 쿼리

Group by add1 ,add2 ,id, name, subId, col1, col2 

Group by add1 || ' ' ||add2,id, name, 
     case 
      when subId =1 then 'Maths' 
      else 'Science' 
     End, 
     nvl(col1, col2) 

모두 시도

기본적으로 주소이 쿼리에 의해 그룹화 할

Select id, name, add1 || ' ' ||add2 address, 
     case 
      when subId =1 then 'Maths' 
      else 'Science' 
     End, 
     nvl(col1, col2) sampleCol 
From Student_tbl 
Where department = 'Student' 

쿼리 다음 한 group by은 동일한 결과를 반환합니다. 나는 어떤 질문이 옳은지 확신 할 수 없다. 아무도 도와주지 않습니까?

+1

일부 샘플 데이터, 무엇을 얻고 있으며 무엇을 원하는지 보여줍니다. – Ditto

+0

집계가없는 그룹이 필요한 이유를 잘 모름 ... 선택 항목에 중복 데이터가 있고 별명이 필요합니까? – xQbert

+0

@xQbert 내 업데이트를 참조하십시오 .. –

답변

1

두 쿼리는 반드시 동일한 결과를 제공하지 않습니다 결코 없다는 것을 의미합니다. 귀하의 요구 사항에 따라 올바른 것입니다. 다음은 입력 열 ADD1ADD2을 집계하여 얻은 새로운 ADDRESS 열을 사용하는 예입니다. 한 행한다고 가정

당신은 당신이 ADD1 = 123 Main Street,ADD2 = Portland, Oregon이 다른 행에 ADD1 = 123 Main Street, Portland, 및 출력에 다음 ADD2 = Oregon., ADDRESS = 123 Main Street, Portland, Oregon

있습니다. 이 행의 경우 결과는 ADDRESS입니다.

ADDRESS으로 그룹화하면 두 출력 행이 같은 그룹에 속하지만, ADD1, ADD2 그룹으로 그룹화하면 서로 다른 그룹에 속하게됩니다. 이 예에서는 ADDRESS으로 그룹화하려고하지만 가능성이 높거나 원하지 않는 다른 유사한 구조의 경우입니다.

3

집계 된 열을 제외하고 "그룹화 기준"의 select 문에서 언급 한 모든 열 (형식이 같은)을 항상 구현하십시오. 귀하의 경우 두 번째 방법을 선호합니다.

SELECT id 
    ,NAME 
    ,add1 || ' ' || add2 address 
    ,CASE 
     WHEN subId = 1 
      THEN 'Maths' 
     ELSE 'Science' 
     END 
    ,nvl(col1, col2) sampleCol 
FROM Student_tbl 
WHERE department = 'Student' 
GROUP BY id 
    ,NAME 
    ,add1 || ' ' || add2 
    ,CASE 
     WHEN subId = 1 
      THEN 'Maths' 
     ELSE 'Science' 
     END 
    ,nvl(col1, col2) 

선택 항목에 집계 된 열을 볼 수 없습니다. 선택에 집합이 필요하지 않은 경우 그룹별로 삭제할 수 있습니다. 결과 세트에 중복 레코드가있을 경우 고유성을 구현할 수 있습니다.

1

마지막 의견을 마친 후 나는 우리가 기대하는 바를 마침내 이해할 것입니다. 접근 모두 당신이 절

하여 그룹에 SELECT 절에 존재하는 모든 필드를 나열했기 때문에

두 쿼리

는 GROUP BY가 id 포함되어 있기 때문에 당신이하고있는 것은 여기에 조금 이상하다 기본적으로 올바른 , 나는 이것이 각 행의 고유 한 식별자라고 생각하므로 마침내 아무것도 그룹화하지 않습니다. 테이블에 포함 된만큼의 행을 얻을 수 있습니다.

동일한 결과를 반환하는 이유는 순전히 데이터 기반입니다. 2 개의 쿼리가 다른 결과를 반환하는 시나리오가있을 수 있습니다. 이 같은 결과를 반환하는 경우 귀하의 경우에는

은, 그것은 col1NULL