Рассчитать значение из того же столбца, но другой категории в той же таблице - PullRequest
0 голосов
/ 15 октября 2019

Я пытался получить 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

Ответы [ 3 ]

1 голос
/ 15 октября 2019

Несколько способов сделать такие вещи. Как подзапросы в другом 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

Или условным аггом:

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'

Я предпочитаю последние два, а не помещать запросы в список выбора, но какой из них будет работать лучше, это вполне среда/ зависит от индекса - попробуйте их!

0 голосов
/ 15 октября 2019

Вы можете попробовать это:

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
0 голосов
/ 15 октября 2019

сгруппируйте их в 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...