>데이터 베이스 >MySQL 튜토리얼 >MySQL의 SUM() 함수를 사용하여 이전 값의 합계를 기반으로 행을 검색하는 방법은 무엇입니까?

MySQL의 SUM() 함수를 사용하여 이전 값의 합계를 기반으로 행을 검색하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-04 16:00:03378검색

How to Retrieve a Row Based on the Sum of Previous Values Using MySQL's SUM() Function?

행 검색을 위한 WHERE 절에서 MySQL SUM() 함수 사용

MySQL을 사용하면 하위 쿼리 내에서 집계 계산을 수행하고 이를 기준으로 사용할 수 있습니다. WHERE 절에서 행 선택 그러나 이 맥락에서 집계 함수 사용의 제한 사항을 이해하는 것이 중요합니다.

다음 시나리오를 고려하십시오. id와 cash 열이 있는 테이블이 있고 합계가 있는 첫 번째 행을 검색하려고 합니다. 이전의 모든 현금 가치 중 특정 기준액을 초과합니다.

표 예:

id cash
1 200
2 301
3 101
4 700

원하는 결과:

For 입력 임계값이 500이면 행 1과 2의 현금 가치 합계(200 301 = 501)가 임계값을 초과하므로 예상 결과는 행 3입니다.

잘못된 접근 방식:

WHERE SUM(현금) 사용 시도 중 > 500은 WHERE 절에서 집계를 직접 비교할 수 없기 때문에 올바른 결과를 산출하지 않습니다.

해결책:

이 제한을 극복하려면 다음에서 HAVING 절을 사용할 수 있습니다. 하위 쿼리와 결합하여 각 행의 현금 누계를 계산합니다.

<code class="sql">SELECT y.id, y.cash
FROM (
    SELECT t.id,
           t.cash,
           (SELECT SUM(x.cash)
              FROM TABLE x
             WHERE x.id <= t.id) AS running_total
     FROM TABLE t
     ORDER BY t.id
) y
WHERE y.running_total > 500
ORDER BY y.id
LIMIT 1;</code>

설명:

  1. 하위 쿼리는 행에 대한 현금 누계를 계산합니다. 각 행은 중첩된 SELECT 문을 사용합니다.
  2. 하위 쿼리의 결과는 y로 별칭이 지정됩니다.
  3. WHERE 절은 행의 누계가 원하는 임계값(이 경우 500)을 초과하는지 확인합니다. ).
  4. 마지막으로 LIMIT 절은 첫 번째 적격 행만 검색합니다.

이 접근 방식을 사용하면 이전의 모든 현금 가치 합계가 임계값을 초과하는 첫 번째 행을 정확하게 식별할 수 있습니다. .

위 내용은 MySQL의 SUM() 함수를 사용하여 이전 값의 합계를 기반으로 행을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.