단일 그룹 함수가 아닌 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
'source' 카테고리의 다른 글
| 지시어의 '말단'을 어떻게 이해합니까? (0) | 2023.03.06 |
|---|---|
| TypeScript에서 중첩된 클래스를 만들 수 있습니까? (0) | 2023.03.01 |
| 스프링 부트 MVC 테스트 - MockMvc는 항상 null입니다. (0) | 2023.03.01 |
| 필드/키별 고유값의 mongodb 카운트 수 (0) | 2023.03.01 |
| JSON 기반 RESTful 코드의 예외를 처리하는 방법 (0) | 2023.03.01 |