我尝试通过此查询获取SUM
的值
SELECT SUM(nominal) Total_Pemasukan FROM kas WHERE jenis = 'Masuk' AND tanggal = '2019-10-14'
SELECT SUM(nominal) Total_Pengeluaran FROM kas WHERE jenis = 'Keluar' AND tanggal = '2019-10-14'
但是我不知道如何在基于类别的表中实现减法,我只想减去第一个和第二个查询。
我希望这样的最终结果
500 - 300 = 200
这是我的餐桌设计
keterangan | tanggal | jenis | nominal
A, 2019-10-14, Masuk, 500
B, 2019-10-14, Keluar, 300
答案 0 :(得分:1)
做这种事情的几种方法。作为另一个SELECT中的子查询:
SELECT
(SELECT SUM(nominal) Total_Pemasukan FROM kas WHERE jenis = 'Masuk' AND tanggal = '2019-10-14')
-
(SELECT SUM(nominal) Total_Pengeluaran FROM kas WHERE jenis = 'Keluar' AND tanggal = '2019-10-14')
或者通过交叉联接的子查询(交叉联接将a中的每一行与b中的每一行相关联。在这种情况下,因为a和b分别有一行,我们不会获得重复的数据)
SELECT
m.Total_Pemasukan - k.Total_Pemasukan
FROM
(SELECT SUM(nominal) Total_Pemasukan FROM kas WHERE jenis = 'Masuk' AND tanggal = '2019-10-14') M
CROSS JOIN
(SELECT SUM(nominal) Total_Pengeluaran FROM kas WHERE jenis = 'Keluar' AND tanggal = '2019-10-14') K
或通过条件agg:
SELECT
SUM(CASE jenis WHEN 'masuk' THEN nominal END) -
SUM(CASE jenis WHEN 'keluar' THEN nominal END) Total_Pemasukan
FROM kas
WHERE jenis IN ( 'Masuk', 'keluar') AND tanggal = '2019-10-14'
相对于将查询放入选择列表,我更喜欢后两个,但是哪个会更好地执行取决于环境/索引-试试看!
答案 1 :(得分:0)
将它们分组为subqueries
,然后执行substraction
SELECT
(SELECT SUM(nominal) Total_Pemasukan
FROM kas WHERE jenis = 'Masuk' AND tanggal = '2019-10-14')
-
(SELECT SUM(nominal) Total_Pengeluaran
FROM kas WHERE jenis = 'Keluar' AND tanggal = '2019-10-14')
答案 2 :(得分:0)
您可以尝试以下方法:
SELECT SUM(nominal) FROM (
SELECT nominal FROM kas WHERE jenis = 'Masuk' AND tanggal = '2019-10-14'
UNION ALL
SELECT -nominal FROM kas WHERE jenis = 'Keluar' AND tanggal = '2019-10-14'
) a