>source

SQL 시험을 연습하고 있는데 다음 질문을 이해할 수 없습니다.

"고객당 평균 지불한 금액 중 가장 높은 금액을 표시합니다."

그래서 지불한 평균 금액을 검색하려면 다음을 수행합니다.

SELECT AVG(Amount) AS 'Average amount paid'
FROM Payment;

그런 다음 이 평균 목록에서 가장 높은 평균 금액을 검색하고 싶습니다. 나는 다음이 트릭을 할 것이라고 생각했습니다.

SELECT MAX(AVG(Amount)) AS 'Highest average amount paid'
FROM Payment;

이것은 작동하지 않는 것 같습니다. 다음 오류가 발생합니다.

집계 또는 하위 쿼리를 포함하는 표현식에 대해 집계 함수를 수행할 수 없습니다.

이와 관련해 도움을 받고 싶습니다. 이에 대한 올바른 접근 방법은 무엇입니까? 미리 감사드립니다.

어떤 dbms가 사용됩니까?

jarlh2021-09-23 16:35:37

죄송합니다. 분명히 했어야 했습니다. Microsoft SQL Server Management Studio를 사용하고 있습니다.

Stefan Jaspers2021-09-23 16:35:37

이미 몇 가지 답이 있지만 요구 사항을 주의 깊게 읽으면 첫 번째 SQL 쿼리가 잘못되었음을 깨달을 수 있습니다. 오른쪽?

Joakim Danielson2021-09-23 16:35:37

그러면 Gordon의 대답은 작동하지 않습니다. 몇 가지 이상한 이유로 SQL Server는 OFFSET과 함께 FETCH FIRST만 지원합니다. 대신 SELECT TOP을 사용하십시오.

jarlh2021-09-23 16:35:37
  • 답변 # 1

    사용주문:

    select customer, avg(amount)
    from payment
    group by customer
    order by avg(amount) desc
    fetch first 1 row only;
    

    먼저 가져오기(표준이지만) 모든 데이터베이스에서 지원되는 것은 아니므로 데이터베이스에 적합한 버전을 사용해야 합니다.

    SQL Server에서는 다음 중 하나를 사용합니다.상단 선택 (1)또는오프셋 0 처음 1행만 가져옴(NS오프셋아아, 선택 사항이 아닙니다.

    다음과 같은 데이터베이스도 있습니다.평균()정수에서 정수를 반환합니다. 만약에정수 이고데이터베이스가 이 작업을 수행한 다음평균(금액 * 1.0).

  • 답변 # 2

    하위 쿼리를 사용해 보세요.

    SELECT MAX(src.cust_avg) AS "Highest average amount paid"
    FROM (
      SELECT cust_id, AVG(Amount) AS cust_avg
      FROM Payment
      GROUP BY cust_id --Get averages per customer
    ) src
    ;
    

    "고객당" 평균을 먼저 얻으려면 다음을 포함해야 합니다.그룹별 cust_id.

    SQL 바이올린

    마지막 줄은 원래 포스터의 초기 쿼리에 추가한 GROUP BY를 설명하는 것이었습니다. 표현이 혼란스럽습니다. 두 번째 GROUP BY를 추가할 필요가 없습니다. 해명하겠습니다. 감사합니다.

    ravioli2021-09-23 16:35:37
  • 답변 # 3

    SQL Server에서 레code를 주문하고 사용할 수 있습니다.TOP 1가장 높은 금액을 가진 기록만 유지하려면:

    SELECT TOP 1 Customer_id, AVG(Amount) AS [Average amount paid]
    FROM Payment
    GROUP BY customer_id
    ORDER BY [Average amount paid] DESC;
    

    참고: 이 쿼리가 의미가 있으려면그룹화 기준절. 그것이 없으면 전체 테이블 내에서 지불의 평균과 함께 하나의 레code만 반환합니다.

  • 이전 javascript : 동일한 ID의 모든 요소에 값(동일한 값)을 설정하는 방법은 무엇입니까? 자바스크립트
  • 다음 arrays : typescript에서 const 배열을 정의하는 방법