반응형
MySQL 행의 총계(Grandtotal)
MariaDB SQL을 작성해야 합니다.이 SQL에서는 2개의 컬럼(Debit 및 Credit Columns)을 합산하여 차액을 얻을 수 있으며, 모든 계정 유형의 소계를 반환할 수 있습니다.표는 다음과 같습니다.
Account | Debit | Credit
acc1 | 1 | 2
acc1 | 1 | 4
acc2 | 3 | 2
acc2 | 2 | 1
acc2 | 2 | 1
acc3 | 5 | 2
acc3 | 5 | 1
acc3 | 5 | 2
아래 상품을 반품하고 싶습니다.
Account | Balance(debit-credit)
acc1 | -1
acc1 | -3
-------------------------------
Total acc1 | -4
-------------------------------
acc2 | 1
acc2 | 1
acc2 | 1
-------------------------------
Total acc2 | 3
-------------------------------
acc3 | 3
acc3 | 4
acc3 | 3
-------------------------------
Total acc3 | 10
-------------------------------
GrandTotal | 9
-------------------------------
Grandtotal is Totals of acc1 + acc2 + acc3
이게 내가 지금까지 해왔던 거야, 어떻게 내가 총계만 얻고 소계만 얻을 수 있지?
SELECT * FROM (
SELECT COALESCE(account,'TOTAL') AS Account, CASE
WHEN account LIKE 'INC%'
THEN sum((gl.credit - gl.debit))
ELSE sum((gl.debit - gl.credit))
END AS Balance
FROM `tabGL Entry` gl
WHERE (NOT (account LIKE 'CASS%')
AND NOT (account LIKE 'CLIA%')
AND NOT (account LIKE 'FASS%'))
GROUP BY account WITH ROLLUP
) AS gl
ORDER BY CASE
WHEN account LIKE 'INC%' THEN 1
WHEN account LIKE 'DCOI%' THEN 2
WHEN account LIKE 'DMC%' THEN 3
WHEN account LIKE 'INFC%' THEN 4
WHEN account LIKE 'IDEX%' THEN 5
ELSE 6
END
와 함께 시도해 볼 수 있습니다.UNION
예를 들어 다음과 같습니다.
SELECT *
FROM (SELECT COALESCE('TOTAL ', account) AS Account
, SUM(CASE WHEN account LIKE 'INC%'
THEN (gl.credit - gl.debit)
ELSE (gl.debit - gl.credit)
END) AS Balance
FROM `tabGL Entry` gl
WHERE (NOT (account LIKE 'CASS%')
AND NOT (account LIKE 'CLIA%')
AND NOT (account LIKE 'FASS%'))
GROUP BY account WITH ROLLUP
-- UNION SELECT account
-- , CASE WHEN account LIKE 'INC%'
-- THEN (gl.credit - gl.debit)
-- ELSE (gl.debit - gl.credit)
-- END AS Balance
-- FROM `tabGL Entry` gl
-- WHERE (NOT (account LIKE 'CASS%')
-- AND NOT (account LIKE 'CLIA%')
-- AND NOT (account LIKE 'FASS%'))
) AS gl
ORDER BY CASE
WHEN account LIKE 'INC%' THEN 1
WHEN account LIKE 'DCOI%' THEN 2
WHEN account LIKE 'DMC%' THEN 3
WHEN account LIKE 'INFC%' THEN 4
WHEN account LIKE 'IDEX%' THEN 5
ELSE 6
END
이 정도면 네가 원하는 대로 할 수 있을 것 같아
주석 처리된 부분은 단일 행에 대한 부분이고, 위쪽 부분은 하위 합계에 대한 부분입니다.
마지막 코멘트 뒤에 서브합계와 총계를 나타내는 쿼리가 표시됩니다.
COALESCE에 의한 그룹화가 문제인 것 같았기 때문에, 현재는, 다음의 방법으로 행해지고 있습니다.LEFT(account,3)
및 그ORDER
문을 3자로 수정해야 했습니다.
SELECT *
FROM (SELECT LEFT(account,3) AS Account
, SUM(CASE WHEN account LIKE 'INC%'
THEN (credit - debit)
ELSE (debit - credit)
END) AS Balance
FROM acc
GROUP BY LEFT(account,3) WITH ROLLUP
) AS ac
ORDER BY CASE
WHEN account LIKE 'INC%' THEN 1
WHEN account LIKE 'DCO%' THEN 2
WHEN account LIKE 'DMC%' THEN 3
WHEN account LIKE 'INF%' THEN 4
WHEN account LIKE 'IDE%' THEN 5
ELSE 6
END
언급URL : https://stackoverflow.com/questions/45582932/mysql-subtotals-of-rows-with-grandtotal
반응형
'programing' 카테고리의 다른 글
기호, 악센트 문자를 영어 알파벳으로 변환 (0) | 2022.09.24 |
---|---|
Mariadb ID 시퀀스가 깨질 때마다 min 및 max 변수를 재설정하는 방법 (0) | 2022.09.24 |
matplotlib의 색상 지도에서 개별 색상 가져오기 (0) | 2022.09.24 |
print_r 결과를 문자열 또는 텍스트로 변수에 저장합니다. (0) | 2022.09.24 |
PHP에서 MySQL 테이블의 마지막 삽입 ID를 얻으려면 어떻게 해야 하나요? (0) | 2022.09.24 |