몇 가지 계산이 있는데 이를 쿼리로 수행하고 싶습니다.
일대다 관계를 갖는 parent 및 child 테이블이 있습니다.
으아아아 으아아아부모의 최종 값을 찾으려면 자식을 반복하고 다음 공식을 계산해야 합니다.
newParentValue = childMultiple(parentValue + childSum)
코드의 구현은 다음과 같습니다.
으아아아쿼리에서 계산을 어떻게 구현하나요?
저는 이 방법을 시도합니다(임시 변수 사용):
으아아아조인 조건에서 변수를 설정(@value := p.value)
하여 각각의 새 부모에 대한 변수를 재설정합니다.
이 쿼리는 자녀 수와 함께 각 부모에 대한 행을 반환합니다. 대답으로 각 부모 연결의 마지막 행이 필요합니다.
하지만 이 방법은 지속 가능하지 않습니다. 더 좋은 방법이 있을까요?
예:
으아아아위의 데이터를 바탕으로 다음과 같은 답변을 기대합니다.
으아아아parent.id=1의 경우 세 명의 하위 항목이 있고 parent.value는 10이므로 첫 번째 하위 항목에 대한 수식을 계산한 후 새 값은 1 * (10 + 1) = 11
,第二个孩子的值是 1 * (11 + 1) = 12
正如预期的那样,第三个子值是 1 * (12 + 1) = 13
(세 하위 항목 모두의 배수이고 합은 1임)입니다.
parent.id=2의 경우 두 개의 하위가 있고 parent.value는 20이므로 첫 번째 하위에 대한 수식을 계산한 후 새 값은 2 * (20 + 2) = 44
,第二个孩子的值是 2 * (44 + 2) = 92
입니다(두 하위는 모두 배수이고 합은 2입니다).
결국 나는 각 부모의 최종 값을 원하므로 최종 예상 결과는 다음과 같습니다.
으아아아예를 단순화하기 위해 각 부모의 자식 테이블의 모든 multiply
和 sum
열은 동일하며(다른 값을 가정) 최종 값은 최대값이며, 최종 값은 매번 최대값이 아닐 수 있습니다. < /p>
정렬을 위해
으아악ROW_NUMBER()
窗口函数对children
的行进行排名,按parent_id
分区并按id
和SUM()
창 기능을 사용하여 원하는 합계를 얻으세요.마지막으로
FIRST_VALUE()
창 기능을 사용하여 각 ID의 마지막 합계를 얻습니다.보기 데모.
부모가 바뀌면 중간에 값을 재설정해야 하기 때문에 조금 까다롭습니다.
다음 쿼리를 시도해 보세요:
으아아아또한
으아아아IF
语句替换上述提到的CASE
문을 사용할 수도 있습니다(가독성이 더 높음)이렇게 하면 원하는 결과가 나올 것입니다.
두 개의 변수를 사용했습니다
@current_parent_value
和@running_parent
@running_parent
将帮助你确定前一行和当前行是否属于同一个parent
,而@current_parent_value
현재 실행 중인 값을 저장하는 데 도움이 됩니다.