>  기사  >  데이터 베이스  >  MySQL에서 이전 값의 합계가 임계값을 초과하는 행을 쿼리하는 방법은 무엇입니까?

MySQL에서 이전 값의 합계가 임계값을 초과하는 행을 쿼리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-05 01:35:01394검색

How to Query for Rows Where the Sum of Previous Values Exceeds a Threshold in MySQL?

MySQL WHERE 절에서 SUM()으로 쿼리

MySQL 테이블 작업 시 집계 계산을 기반으로 행을 검색해야 할 수도 있습니다. , 예를 들어 이전 값의 합계입니다. 그러나 WHERE 절에서 직접 SUM()을 사용하면 예상한 결과가 나오지 않을 수 있습니다.

"id" 및 "cash" 열이 있는 테이블이 있다고 가정합니다.

id | cash
1    200
2    301
3    101
4    700

검색하려면 WHERE SUM(cash) > 500은 예상대로 작동하지 않습니다.

HAVING 절을 사용한 솔루션

MySQL에서는 WHERE 절이 아닌 HAVING 절에서 집계 비교를 허용합니다. 원하는 결과를 얻으려면 다음 쿼리를 사용할 수 있습니다.

GROUP BY ...
HAVING SUM(cash) > 500

그러나 이를 위해서는 GROUP BY 절을 정의해야 하며 이는 필요하지 않을 수도 있습니다.

중첩 사용 누적 합계가 포함된 하위 쿼리

다른 접근 방식은 중첩된 하위 쿼리를 사용하여 누적 합계를 계산한 다음 이를 WHERE 절에 지정된 값과 비교하는 것입니다.

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

In 이 쿼리에서는 테이블의 각 행에 대한 누계를 계산하는 데 하위 쿼리가 사용됩니다. 별칭 running_total은 WHERE 절에서 이 값을 참조하는 데 사용됩니다. 조건에 맞는 첫 번째 행만 반환하기 위해 LIMIT 절을 추가했습니다.

이 접근 방식을 사용하면 WHERE 절의 집계 값을 직접 비교할 수 있으며 GROUP BY 절이 필요 없이 원하는 결과를 얻을 수 있습니다.

위 내용은 MySQL에서 이전 값의 합계가 임계값을 초과하는 행을 쿼리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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