복붙노트

[SQL] SQL이 아닌 단일 그룹의 그룹 기능

SQL

SQL이 아닌 단일 그룹의 그룹 기능

나는 다음과 같은 SQL 문을 실행할 때 :

SELECT MAX(SUM(TIME))
FROM downloads
GROUP BY SSN

내가 select 문에 추가하여 그 최대 값이 속한 사회 보장 번호를 찾으려고하지만 경우, 고객이 다운로드의 최대 합계 값을 반환합니다 :

SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN

나는 다음과 같은 오류가 발생합니다 :

그것은이 오류를 던지고 난 왜 이해가 안 돼요. 구글 검색은 다음 작업을 함께했다 :

SELECT 목록에서 그룹 함수 또는 개별 열 표현 중 하나를 떨어 뜨리거나 나열된 모든 개별 열 표현식을 포함 GROUP BY 절을 추가

나는이 생각을 말하고에서 - 그룹 기능을 삭제하면 합계 값 유효하게 - 개별 열 표현 (SSN)를 떨어 뜨릴 단지 나에게 최대 합계를 줄 것이다 -하지 않도록 그 세 번째 부분에 대해.

사람이 올바른 방향으로 안내 할 수 있을까요?

-Tomek

편집 :이 데이터베이스의 시간은 시간의 수를 나타냅니다 다운로드

해결법

  1. ==============================

    1.그런데 문제가 단순히-넣어 귀하의 질의에 특정의 SSN에 대한 SUM (TIME)이 단일 값이 더 의미 (단일 값의 최대되는 의미를)하지 않습니다대로 MAX에 반대하는, 그래서 것입니다.

    그런데 문제가 단순히-넣어 귀하의 질의에 특정의 SSN에 대한 SUM (TIME)이 단일 값이 더 의미 (단일 값의 최대되는 의미를)하지 않습니다대로 MAX에 반대하는, 그래서 것입니다.

    확실하지 당신이 사용하고하지만 난 당신이 더이 같은 쿼리 원하는 의심 어떤 SQL 데이터베이스 서버 (A MSSQL 배경으로 글이 - 당신이 사용하고있는 SQL 서버에 일부 번역을해야 할 수도 있습니다) :

    SELECT TOP 1 SSN, SUM(TIME)
    FROM downloads
    GROUP BY SSN
    ORDER BY 2 DESC
    

    이것은 당신에게 가장 높은 총 시간과의 총 시간에 SSN을 줄 것이다.

    편집 - 당신이 동일한 시간에 여러 있고 그들 모두를 원하는 경우에 당신은 사용합니다 :

    SELECT
    SSN, SUM(TIME)
    FROM downloads
    GROUP BY SSN
    HAVING SUM(TIME)=(SELECT MAX(SUM(TIME)) FROM downloads GROUP BY SSN))
    
  2. ==============================

    2.각 고객의 사용에 대한 다운로드 번호를 원하는 경우 :

    각 고객의 사용에 대한 다운로드 번호를 원하는 경우 :

    select ssn
         , sum(time)
      from downloads
     group by ssn
    

    다운로드의 가장 많은 고객을위한 - - 당신은 단지 하나 개의 레코드하려면 사용 :

    select *
      from (
            select ssn
                 , sum(time)
              from downloads
             group by ssn
             order by sum(time) desc
           )
     where rownum = 1
    

    그러나 당신이 가장 높은 위치, 사용을 공유 다운로드 같은 수의, 모든 고객을보고 싶다면 :

    select *
      from (
            select ssn
                 , sum(time)
                 , dense_rank() over (order by sum(time) desc) r
              from downloads
             group by ssn
           )
     where r = 1
    
  3. ==============================

    3.아마 당신은이 간단한을 찾아

    아마 당신은이 간단한을 찾아

    select * from (
        select ssn, sum(time) from downloads
        group by ssn
        order by sum(time) desc
    ) where rownum <= 10 --top 10 downloaders
    

    문안 인사 케이

  4. from https://stackoverflow.com/questions/1795198/sql-not-a-single-group-group-function by cc-by-sa and MIT license