Я бы написал это немного проще:
SELECT p.id, p.title, p.price, p.status,
(SELECT COUNT(*)
FROM payments pa
WHERE pa.product = p.id AND
pa.vendor = p.member AND
pa.credited = 'Vendor' AND
pa.status IN ('Completed','Pending', 'Canceled_Reversal')
) AS sales,
(SELECT SUM(pa.price)
FROM payments pa
WHERE pa.product = p.id AND
pa.vendor = p.member AND
pa.credited = 'Vendor' AND
pa.status IN ('Completed','Pending','Canceled_Reversal')
) AS revenue
FROM products p
WHERE p.member = 1 AND
p.status NOT IN ('Deleted', 'Blocked');
Это в основном ваш запрос с более простыми псевдонимами и логами c.
С индексом на payments(product, vendor, credit, status, price)
это вероятно, быстрее, чем другие методы.
Альтернатива:
SELECT p.id, p.title, p.price, p.status,
COUNT(pa.product) as sales
SUM(pa.price) as revenue
FROM products p LEFT JOIN
payments pa
ON pa.product = p.id AND
pa.vendor = p.member AND
pa.credited = 'Vendor' AND
pa.status IN ('Completed', 'Pending', 'Canceled_Reversal')
WHERE p.member = 1 AND
p.status NOT IN ('Deleted', 'Blocked')
GROUP BY p.id, p.title, p.price, p.status;
Однако подзапросы, вероятно, быстрее.