यह पूरा जवाब नहीं है लेकिन यह करीब है। कोई फर्क नहीं पड़ता कि मैं डेटा कैसे काम करता हूं, मैं यह नहीं समझ सकता कि आप cash_has
के साथ कैसे आ रहे हैं . इसके अलावा मैं इसे कच्चा एसक्यूएल रख रहा हूं क्योंकि मुझे लगता है कि यह अधिक सहायक होगा और क्वेरी बिल्डर में वापस कनवर्ट करना मुश्किल नहीं होना चाहिए। मुझे कॉलम के सटीक नाम भी नहीं पता हैं, इसलिए आपको उनमें से कुछ को ठीक करना पड़ सकता है।
SELECT
COALESCE(outlets_admin.name, outlets.name) AS outlet,
COALESCE(boys_admin.name, boys.name) AS delivery_boy,
SUM(IF(cm.source_type = 'admin', amount, 0)) AS cash_taken,
SUM(IF(cm.source_type = 'deliveryBoy', amount, 0)) AS cash_returned,
SUM(IF(cm.source_type = 'admin', amount, 0)) - SUM(IF(cm.source_type = 'deliveryBoy', amount, 0)) AS cash_has
FROM delivery_cash_manages cm
LEFT JOIN outlets ON outlets.id = cm.destination_id AND cm.source_type = 'deliveryBoy'
LEFT JOIN delivery_boys boys ON boys.id = cm.source_id AND cm.source_type = 'deliveryBoy'
LEFT JOIN outlets outlets_admin ON outlets_admin.id = cm.source_id AND cm.source_type = 'admin'
LEFT JOIN delivery_boys boys_admin ON boys_admin.id = cm.destination_id AND cm.source_type = 'admin'
WHERE COALESCE(outlets.id, outlets_admin.id) = '2' # This is where you plug in your $outlet_id
GROUP BY outlet, delivery_boy
आपकी क्वेरी में त्रुटि होने का कारण यह है कि यदि आप किसी भी चीज़ के आधार पर समूह बनाते हैं, तो आपको उन सभी चीज़ों के आधार पर समूह बनाने की आवश्यकता होती है जो कुल कॉलम नहीं हैं (योग, अधिकतम, औसत जैसे कार्य)।