2010-02-01 6 views
1

SQL에 명령이 주어졌습니다.SELECT 행에없는 항목으로 그룹화 할 수 있습니까?

SELECT ... 
    FROM ... 
    GROUP BY ... 

SELECT 행에없는 항목으로 그룹화 할 수 있습니까?

+1

Zapping - SQL 명령 줄에 문장을 입력하여 * 시도하는 것이 너무 많은 작업 인 경우, 가난한 사람이 바쁜 날로부터 시간을 들여 여기로 돌아와 답변을 수락 할 수 있다고 어떻게 기대할 수 있습니까? 그를 도운 사람들로부터? –

답변

3

예 물론 맞습니다.

select 
    count(*) 
from 
    some_table_with_updated_column 
group by 
    trunc(updated, 'MM.YYYY') 
2

예, 가능합니다. 예 :

select count(1) 
    from sales 
group by salesman_id 

당신이 할 수없는 것을 물론, GROUP BY 절에 포함되지 않은 (집계 함수가 아닌 다른) 당신의 선택 조항에 뭔가를 가지고있는 경우.

+1

슬프게도 MySQL *은 그룹에없는 경우에도 select 절에 모든 것을 넣을 수 있습니다.이로 인해 실제 쿼리가 실행되지 않습니다. 이런 식으로 문제는 종종 숨겨지고 찾기가 매우 어려워집니다. –

+1

와우 ... 그걸 몰랐어. 슬픈. 코멘트 주셔서 감사합니다. –

0

다른 DBMS에 대해서는 잘 모르겠지만 DB2/z는이를 잘 수행합니다. 선택 부분에 열을 가질 필요는 없지만 집계하기 위해 표에서 데이터를 추출해야하므로 당분간은 저장하지 않을 것입니다. 필요한 열만 선택해야하며 데이터 집계는이 열과 별도의 작업입니다.

저는 SQL 표준이 이것을 허용한다는 것을 확신합니다 (메인 프레임 DB2 제품이 꽤 가깝다는 지식에 기초하고 있지만).

3

예, 가능하지만 어떤 결과가 어떤 그룹인지 알 수 없습니다.

따라서 거의 항상 select 절에서 그룹화 한 열을 반환하려고합니다. 그러나 당신은 할 필요가 없습니다.

3

예.

종종이 같은 superaggregate 쿼리에 사용됩니다 집계를 집계

SELECT AVG(cnt) 
FROM (
     SELECT COUNT(*) AS cnt 
     FROM sales 
     GROUP BY 
       product 
     HAVING COUNT(*) > 10 
     ) q 

을.

1

흠, 내가

내가 GROUP BY에서이없는 무언가를 선택할 수 있습니다, 문제는 같은 라운드 다른 방법으로 했어야 생각?

SELECT customerId, count(orderId) FROM orders 
GROUP BY customerId, orderedOn 

당신이 고객 datewise에 의해 수행 주문 번호를 찾으려면 :

이 같은 코드를 작성 괜찮아. 하지만 당신은 그것을 라운드 다른 방법으로 수행 할 수 없습니다

SELECT customerId, orderedOn count(orderId) FROM orders 
GROUP BY customerId 

당신은에 의해 그룹이없는 열에 집계 함수를 발행 할 수 있습니다. 그러나 집계 함수를 사용하지 않으면 선택 줄에 줄 수는 없습니다. 그것이별로 의미가 없기 때문에. 위의 쿼리와 같습니다. 주문 수에 대한 고객 ID로 그룹화하고 출력에 날짜를 인쇄하고 싶습니다. 카운팅을 위해 그룹에 날짜 요소를 포함시키지 마십시오. 날짜가 포함될 것입니까?

관련 문제