source

단일 그룹 함수가 아닌 SQL

bestscript 2023. 3. 1. 11:17

단일 그룹 함수가 아닌 SQL

다음 SQL 문을 실행하는 경우:

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

고객님의 다운로드 최대 합계값을 반환합니다.단, 이 최대값이 속한 사회보장번호를 선택문에 추가하여 검색하려고 하면 다음과 같이 됩니다.

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

다음의 에러가 표시됩니다.

단일 그룹 함수가 아님

나는 왜 그것이 이 오류를 발생시키는지 이해할 수 없다.Google 검색에서 다음 작업을 수행했습니다.

그룹 함수 또는 개별 열 식을 SELECT 목록에서 삭제하거나 나열된 모든 개별 열 식을 포함하는 GROUP BY 절을 추가합니다.

그룹 함수를 드롭하면 합계 값이 무효가 됩니다.개별 열식(SSN)을 드롭하면 최대 합계만 표시됩니다.세 번째 부분은 확실하지 않습니다.

누구라도 올바른 방향으로 인도해 줄 수 있나요?

-토멕

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

문제는 쉽게 말해 쿼리의 특정 SSN에 대한 SUM(TIME)이 단일 값이기 때문에 MAX에 대한 거부감이 있다는 것입니다(단일 값의 최대값은 무의미함).

어떤 SQL 데이터베이스 서버를 사용하고 있는지 알 수 없지만 다음과 같은 쿼리를 원할 수 있습니다(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))

각 고객에 대한 다운로드 번호를 원할 경우 다음을 사용하십시오.

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

어쩌면 이게 더 쉬울지도 몰라

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

안부 전해요
K

언급URL : https://stackoverflow.com/questions/1795198/sql-not-a-single-group-group-function