>데이터 베이스 >MySQL 튜토리얼 >SQL을 사용하여 데이터베이스 테이블의 연속 행 간의 값 차이를 계산하는 방법은 무엇입니까?

SQL을 사용하여 데이터베이스 테이블의 연속 행 간의 값 차이를 계산하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-10 15:22:43805검색

How to Calculate the Value Difference Between Consecutive Rows in a Database Table Using SQL?

SQL을 사용하여 데이터베이스 테이블의 연속 행 간의 차이 계산

행 식별자(rowInt)와 숫자 값(Value)이 비순차적 정수인 데이터베이스 테이블이 있다고 가정해 보겠습니다. 문제는 SQL을 사용하여 연속된 행의 Value 차이를 효율적으로 계산하는 것입니다.

다음과 같은 간단한 쿼리로 데이터를 검색합니다.

<code class="language-sql">SELECT * FROM myTable ORDER BY rowInt;</code>

그러나 차이를 계산하고 표시해야 합니다. 원하는 출력 형식은 다음과 같습니다.

<code>rowInt   Value   Diff
2        23      22    --45-23
3        45     -35    --10-45
9        10     -45    --0-45
17       0       0     --0 (or NULL, depending on desired behavior)</code>

하위 쿼리가 포함된 셀프 조인을 사용하여 이를 달성하는 방법은 다음과 같습니다.

<code class="language-sql">SELECT
    c.rowInt,
    c.Value,
    ISNULL(n.Value, 0) - c.Value AS Diff
FROM
    myTable AS c
LEFT JOIN
    myTable AS n ON n.rowInt = (SELECT MIN(rowInt) FROM myTable WHERE rowInt > c.rowInt)
ORDER BY c.rowInt;</code>

이 쿼리는 LEFT JOIN(현재) 및 myTable(다음)이라는 별칭으로 테이블(c)의 n을 자체적으로 수행합니다. ON 절 내의 하위 쿼리는 현재 행의 rowInt보다 큰 최소 rowInt를 찾아 다음 행을 효과적으로 식별합니다. ISNULL(n.Value, 0)은 다음 행(마지막 행)이 없는 경우를 처리하며 누락된 n.Value을 0으로 대체합니다. 그런 다음 차이가 계산되어 Diff으로 별칭이 지정됩니다. 마지막 ORDER BY 절은 결과가 올바른 순서로 표시되도록 보장합니다. 또는 COALESCE 대신 ISNULL을 사용할 수도 있습니다. 선택은 특정 데이터베이스 시스템에 따라 다릅니다.

위 내용은 SQL을 사용하여 데이터베이스 테이블의 연속 행 간의 값 차이를 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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