@maratmd

Как написать sql на вычитание данных?

Привет, хотелось бы получить помощь в решении вопроса, что то никак не пойму как это сделать.

Есть два запроса:
1 запрос.
SELECT wp_posts.post_title, v2.meta_value
FROM wp_posts
JOIN wp_postmeta v1 ON (wp_posts.ID = v1.post_id)
JOIN wp_postmeta v2 ON (wp_posts.ID = v2.post_id)
WHERE
((v1.meta_key = 'id_rab_1' AND v1.meta_value = '981' AND v2.meta_key = 'summa_rab_1' )
OR
(v1.meta_key = 'id_rab_2' AND v1.meta_value = '981' AND v2.meta_key = 'summa_rab_2' ))
and wp_posts.post_date between '2022-08-01' and '2022-09-01'

Этим запросом я получаю посты в которых участвовал сотрудник "981" и сколько он за это получил.

2 запрос.
SELECT wp_posts.post_title, v2.meta_value
FROM wp_posts
JOIN wp_postmeta v1 ON (wp_posts.ID = v1.post_id)
JOIN wp_postmeta v2 ON (wp_posts.ID = v2.post_id)
WHERE
v1.meta_key = 'id_sotrudnika' AND v1.meta_value = '981' AND v2.meta_key = 'summa_poluchennoj_zarplaty' 
and wp_posts.post_date between '2022-08-01' and '2022-09-01'


Этим запросом я получаю количество раз когда сотруднику "981" выдавалась зарплата и ее сумма

Вопрос в следующем как из суммы первого запроса вычесть сумму второго запроса? Получается нужно суммировать всю начисленную зарплату, и минусовать сумму уже выданной.

База получается одна или для первого и второго запроса wp_posts через join соединяется с wp_postmeta. Единственная разница между постами это post_type, у первого запроса post_type = zakazy, у второго post_type = zarplata.
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
-- Query 1: All records

SELECT 
	wp_posts.post_title, 
	CASE 
		WHEN v1.meta_key = 'id_sotrudnika' AND v2.meta_key = 'summa_poluchennoj_zarplaty' 
		THEN -v2.meta_value
		ELSE v2.meta_value
	END AS netto
FROM wp_posts
JOIN wp_postmeta v1 ON (wp_posts.ID = v1.post_id)
JOIN wp_postmeta v2 ON (wp_posts.ID = v2.post_id)
WHERE
	v1.meta_key IN ('id_rab_1', 'id_sotrudnika') AND v1.meta_value = '981' AND 
	v2.meta_key  IN ('summa_rab_1', 'summa_rab_2', 'summa_poluchennoj_zarplaty');



-- Query 2: Summarized records

SELECT 
	wp_posts.post_title, 
	SUM(CASE 
		WHEN v1.meta_key = 'id_sotrudnika' AND v2.meta_key = 'summa_poluchennoj_zarplaty' 
		THEN -v2.meta_value
		ELSE v2.meta_value
	END) AS netto
FROM wp_posts
JOIN wp_postmeta v1 ON (wp_posts.ID = v1.post_id)
JOIN wp_postmeta v2 ON (wp_posts.ID = v2.post_id)
WHERE
	v1.meta_key IN ('id_rab_1', 'id_sotrudnika') AND v1.meta_value = '981' AND 
	v2.meta_key  IN ('summa_rab_1', 'summa_rab_2', 'summa_poluchennoj_zarplaty');


SQL editor online
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы