codememo

MySQL에서 (flow) 쿼리의 (stock) 결과를 축적하는 방법

tipmemo 2023. 9. 15. 21:01
반응형

MySQL에서 (flow) 쿼리의 (stock) 결과를 축적하는 방법

계좌가 신용인 경우 합산하고 차변인 경우 차감하는 질문이 있습니다.

쿼리 번호 1 - 흐름

SELECT year(data), month(data), 
    (
        SUM(IF(Credito='Conta Corrente Itau', valor, 0))-
        SUM(IF(Debito='Conta Corrente Itau', valor, 0))
    )
AS Fluxo    
FROM base
GROUP BY YEAR(data), MONTH(data)

잘 작동하고 다음과 같은 것을 얻을 수 있습니다.

2015    4   -9.999999999996362
2015    5   0.059999999997671694
2015    6   -139.6999999999971
2015    7   140.15999999999804
2015    8   466.85999999999876
2015    9   -81.24999999999818
2015    10  -525.2499999999991

제가 결과를 누적해서 특정 계좌의 흐름이 아니라 잔액을 주는 것만 빼면 완벽합니다.

누적되는 쿼리를 찾았습니다.

쿼리 번호 2 - 누적:

SELECT data, base, (@total := @total + base) AS ValorTotal
FROM (
    SELECT data,
    SUM(VALOR)
    AS base 
    FROM base
    WHERE
        (debito="Conta Corrente Itau")
    GROUP BY YEAR(DATA), MONTH(DATA)
    ) AS T,
(SELECT @total:=0) AS n;

하지만 계정의 잔액을 갖기 위해 위의 (작동하는) 쿼리 1번 코드 전체를 누적 쿼리 안에 어디에 넣어야 하는지에 대해서는 다소 불분명합니다.

쿼리 2에서 SELECT 문 전체를 교체하려고 했지만 다음을 받았습니다.unknown column 'data' in field list오류:

SELECT data, base, (@total := @total + base) AS ValorTotal
FROM (
        SELECT year(data), month(data), 
            (
                SUM(IF(Credito='Conta Corrente Itau', valor, 0))-
                SUM(IF(Debito='Conta Corrente Itau', valor, 0))
            )
        AS Fluxo
        FROM base
        GROUP BY YEAR(DATA), MONTH(DATA)
    ) AS T,
(SELECT @total:=0) AS n;

내가 이걸 어떻게 할 수 있는지 아는 사람?

미리 감사드립니다.

하위 쿼리의 열에 별칭을 사용해야 할 것 같습니다.예를 들어,

SELECT Y,(@total := @total + Fluxo) AS ValorTotal
FROM (
        SELECT year(data) AS Y, month(data) AS M, 
            (
                SUM(IF(Credito='Conta Corrente Itau', valor, 0))-
                SUM(IF(Debito='Conta Corrente Itau', valor, 0))
            ) AS Fluxo
        FROM base
        GROUP BY YEAR(DATA), MONTH(DATA)
    ) AS T,
(SELECT @total:=0) AS n;

별칭이 있는 하위 쿼리T이름이 있는 열만 반환(Y,M,Fluxo)그리고 오직 그것들만 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/47523971/how-to-accumulate-stock-result-of-flow-query-in-mysql

반응형