2012-08-06 6 views
0

SELECT a,b from <table_name> GROUP BY a,b,c.GROUP BY 절 이해

위의 SQL 문은 유효한 항목입니까?

+0

테이블 이름이 누락되었으므로 실제로는 그렇지 않습니다. – Charleh

+1

왜이 질문을합니까? 위의 내용을 MySQL에서 시도해 보았는데 이해할 수없는 오류로 인해 실패 했습니까? 아니면 단지 궁금합니까? – Bojangles

+0

나는 호기심있다. 내 이해가가는 한, GROUP BY 절에 나타나지 않는 SELECT 절에 지정된 열에는 집계 함수 만 사용할 수 있습니다. 또한, 나는 SELECT 절에 포함될 GROUP BY에 지정된 모든 열을 포함해야한다는 것을 알고 싶었습니다. – siddarthforever

답변

4

테이블 이름이없는 것은 아닙니다. 테이블 이름이 있으면 유효하지만 아마도별로 유용하지는 않습니다.

일반적으로 일부 집계 함수 (SUM, COUNT, MAX, MIN 등)와 함께 GROUP BY 절을 사용하여 그룹화 된 필드와 관련된 일부 값을 유도합니다.

+0

죄송합니다. SELECT a, b를 에서 GROUP BY a, b, c. 이것은 진술이었다. – siddarthforever

1

아니요 - 표가 필요합니다. myTable에 당신이에서 선택하는 테이블입니다

SELECT a,b FROM myTable GROUP BY a,b,c

(B 열을 가지고해야하는가 및 c).

0

아니요 - 테이블 이름을 지정하지 않았기 때문에 아니오. 그렇다면 MySQL에 대해서는 확실히 유효합니다. 오라클에 대해서는 확실하지 않습니다 (GROUP을 매우 다르게 검증 함).

0 0 
0 0 
0 1 
0 1 

그리고 그게 의미있는 결과가 될 것입니다 표시되지 않습니다 - 경우 :하지만 테이블에 쿼리를 적용

a b c 
0 0 0 
0 0 1 
0 1 0 
0 1 1 

위의 줄 것이다 ... 어떤 이해가되지 않습니다 우리는 대답에서 더 합리적인 시도를 만들 수있는 진짜 이유는 질문을 youwere 당신이 설명하면 아마

SELECT DISTINCT a, FROM `atable` 

0 0 
0 1 

:하지만 다른 결과를 제공합니다 - 당신이 집계 값을 싶지 않아, 다음 DISTINCT 더 의미가 있습니다 그것.

2

테이블 이름을 포함하면 선택하지 않은 요소로 그룹화 할 수 있는지 묻는 것입니다. c. 그래 넌 할수있어.

+0

네, 설명해 주셔서 감사합니다. 질문의 서식을 지정하는 동안 table_name을 포함하는 것을 잊었습니다. – siddarthforever

0

예, 해당 쿼리는 유효한 SQL입니다. 여부는 유용 SQL은 완전히 다른 문제입니다.

쿼리

select a , b 
from foo 
group by a,b,c 

는 다음을 열 a, bc의 고유 한 각 조합에 대한

  • 별개의 그룹으로 소스 테이블에서 그룹 행 1.
  • 그런 다음 각 그룹은 그룹화 열과 쿼리에서 필요한 모든 집계 함수의 값이 포함 된 단일 행으로 축소됩니다.
  • 그런 다음 결과 집합을 호출자에게 보내 원치 않는 열 (이 경우 열 c)을 던집니다.

그룹화 열 중 하나가 삭제되므로 지정된 쿼리가 고유 한 행 집합으로 보장되지 않습니다. 그것은 중복을 포함 할 수 있습니다.예를 들어, group by 경우 반환되는이 그룹 내놓았다 : 쿼리에서 반환

A B C 
- - - 
0 0 0 
0 0 1 
0 1 0 
0 1 1 
1 0 0 
1 0 1 
1 1 0 
1 1 1 

결과 세트가

A B 
- - 
0 0 
0 0 
0 1 
0 1 
1 0 
1 0 
1 1 
1 1 

그래서, 반드시 유용하지 될 것이다.