MySQL의 조인 쿼리 계산
P粉726234648
P粉726234648 2024-02-17 22:58:39
0
2
499

몇 가지 계산이 있는데 이를 쿼리로 수행하고 싶습니다.

일대다 관계를 갖는 parentchild 테이블이 있습니다.

으아아아 으아아아

부모의 최종 값을 찾으려면 자식을 반복하고 다음 공식을 계산해야 합니다. 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입니다).

결국 나는 각 부모의 최종 값을 원하므로 최종 예상 결과는 다음과 같습니다.

으아아아

예를 단순화하기 위해 각 부모의 자식 테이블의 모든 multiplysum 열은 동일하며(다른 값을 가정) 최종 값은 최대값이며, 최종 값은 매번 최대값이 아닐 수 있습니다. < /p>

P粉726234648
P粉726234648

모든 응답(2)
P粉493313067

정렬을 위해 ROW_NUMBER()窗口函数对children的行进行排名,按parent_id分区并按idSUM()창 기능을 사용하여 원하는 합계를 얻으세요.
마지막으로 FIRST_VALUE() 창 기능을 사용하여 각 ID의 마지막 합계를 얻습니다.

으아악

보기 데모.

P粉959676410

부모가 바뀌면 중간에 값을 재설정해야 하기 때문에 조금 까다롭습니다.

다음 쿼리를 시도해 보세요:

으아아아

또한 IF语句替换上述提到的CASE문을 사용할 수도 있습니다(가독성이 더 높음)

으아아아

이렇게 하면 원하는 결과가 나올 것입니다.

두 개의 변수를 사용했습니다@current_parent_value@running_parent

@running_parent将帮助你确定前一行和当前行是否属于同一个parent,而@current_parent_value 현재 실행 중인 값을 저장하는 데 도움이 됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿