>데이터 베이스 >MySQL 튜토리얼 >SN별로 그룹화된 MySQL에서 이전 행 값을 빼서 소비를 계산하는 방법은 무엇입니까?

SN별로 그룹화된 MySQL에서 이전 행 값을 빼서 소비를 계산하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-10 11:41:42120검색

How to Calculate Consumption by Subtracting Previous Row Values in MySQL, Grouped by SN?

MySQL에서 소비 계산: SN별로 그룹화된 이전 행 값 빼기

이 가이드에서는 MySQL 테이블의 각 SN 그룹 내 연속 값을 비교하여 소비량을 계산하는 방법을 보여줍니다. 데이터에는 시간 경과에 따른 측정값을 나타내는 SN(일련 번호) 및 Value 열이 포함됩니다. 목표는 현재 값에서 이전 값을 빼서 각 SN의 소비량을 계산하는 것입니다.

이를 달성하기 위해 사용자 정의 변수를 활용하는 MySQL 쿼리는 다음과 같습니다.

<code class="language-sql">SELECT
  EL.SN,
  EL.Date,
  EL.Value,
  IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00) AS Consumption,
  @lastSN := EL.SN,
  @lastValue := EL.Value
FROM
  EnergyLog EL,
  (SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars
ORDER BY
  EL.SN,
  EL.Date;</code>

쿼리 설명:

  1. 변수 초기화: 하위 쿼리 (SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars는 사용자 정의 변수 @lastSN(이전 SN 추적) 및 @lastValue(이전 Value 추적)을 NULL. 0 대신 NULL을 사용하면 각 SN 그룹의 첫 번째 행이 올바르게 처리됩니다.

  2. 행별 처리: 기본 쿼리는 EnergyLogEL 순서로 SN 테이블(별칭 Date)을 통해 반복됩니다.

  3. 소비 계산: IF 문은 현재 SN(EL.SN)가 이전에 처리된 SN(@lastSN)과 일치하는지 확인합니다.

    • 일치하면 소비량을 EL.Value - @lastValue으로 계산합니다.
    • 일치하지 않으면(새 SN 그룹을 의미) 소비량을 0.00으로 설정합니다.
  4. 변수 업데이트: @lastSN := EL.SN@lastValue := EL.Value는 다음 행의 비교를 위해 변수를 업데이트합니다.

  5. 출력: 쿼리는 각 행에 대해 SN, Date, Value 및 계산된 Consumption을 반환합니다.

이 접근 방식은 단일 쿼리를 사용하여 각 SN 그룹 내의 소비를 효율적으로 계산하므로 더 복잡한 하위 쿼리나 조인이 필요하지 않습니다. 사용자 정의 변수를 사용하면 계산이 간결하고 효율적으로 이루어집니다.

위 내용은 SN별로 그룹화된 MySQL에서 이전 행 값을 빼서 소비를 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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