>  Q&A  >  본문

"MySQL의 합계(if) 그룹화"

로드되지 않는 다음 테이블이 있습니다. 지불 날짜, 사용자 ID, 월별 금액_지난 30일

사용자 ID와 결제 날짜는 표에서 가져옵니다. monthlyAmount_last30d字段에서 해당 기간(결제일 - 30일)에 대한 금액을 확인하고 싶습니다.

이러한 결과를 얻기 위해 이러한 열을 올바르게 그룹화하는 방법을 알 수 없습니다. user_id로만 그룹화하면 결제 날짜가 있는 첫 번째 행만 표시됩니다(모든 행이 필요하며 각 행에는 해당 행의 결제 날짜인 해당 사용자 ID에 대한 결제 총액(30일의 합계)이 있습니다). 두 필드를 모두 기준으로 그룹화하면 내가 받는 지불 금액은 항상 해당 행의 지불 금액과 같고 필요한 기간에 대한 실제 금액은 아닙니다.

으아악

어떤 조언이라도 감사드립니다!

업데이트:

데이터 예:

사용자_ID 결제일 주문_비용_문의
1 2022-01-01 12:00:00 100
1 2022-01-01 13:00:00 100
1 2022-01-03 20:00:00 150
2 2022-01-03 16:00:00 200
2 2022-01-15 11:00:00 300

예상 결과:

사용자_ID 결제일 주문_비용_문의 monthlyAmount_last30d
1 2022-01-01 12:00:00 100 100
1 2022-01-01 13:00:00 100 200
1 2022-01-03 20:00:00 150 350
2 2022-01-03 16:00:00 200 200
2 2022-01-15 11:00:00 300 500

P粉026665919P粉026665919380일 전386

모든 응답(1)나는 대답할 것이다

  • P粉138871485

    P粉1388714852023-09-12 10:16:40

    IF()에서 시도하고 있는 것이 잘못된 것 같습니다. 당신이 요구하는 것은

    와 같은 WHERE 절에 적용되어야 한다고 생각합니다.

    지난 30일 동안 발생한 모든 거래 기록을 모두 원합니다. 여기에서 각 사람별로 그룹화된 모든 구매 총액을 원합니다. 맞는 것 같나요?

    으아악

    쿼리의 WHERE 절을 적용하면 이전 거래 기록을 전혀 얻을 수 없으므로 각 기록에 IF() 조건부 검사를 적용할 필요가 없습니다.

    수정된 쿼리입니다. 따라서 모든 기록을 표시하되 지난 30일 동안만 확인하려고 합니다. 따라서 WHERE 절은 여전히 ​​적용됩니다. 하지만 이제는 모든 일반 레코드에 대한 모든 열을 표시하고 있습니다. SUM()을 살펴보세요. 요청한 누적 합계를 수행하고 있습니다.

    뒤에 있는 OVER 절에 주목하세요(sum() 프로시저와 관련된 컨텍스트를 표시하기 위해 들여쓰기했습니다). OVER는 분할을 지정합니다(그룹 기준과 유사하지만 일반적인 외부 그룹 기준은 아님). 이는 단순히 이 파티션 값이 변경되면 다시 시작하는 것을 의미합니다. 이 경우에는 사용자 ID입니다. 그리고 파티션 내 ORDER BY 명령어를 통해 결제일 기준으로 데이터가 정렬됩니다.

    이것이 귀하의 요구를 충족해야 한다고 생각합니다.

    회신하다
    0
  • 취소회신하다