sql >> Database >  >> RDS >> Mysql

Welsprekende vraag van Laravel

Dit is niet het volledige antwoord, maar het komt in de buurt. Hoe ik ook met de gegevens werk, ik kan er niet achter komen hoe je aan cash_has komt . Ik houd het ook onbewerkte SQL omdat ik denk dat het nuttiger zou zijn en niet moeilijk zou moeten zijn om terug te converteren naar querybuilder. Ik weet ook niet de exacte kolomnamen, dus het kan zijn dat je er een paar moet corrigeren.

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

De reden dat u echter een foutmelding krijgt met uw zoekopdracht, is dat als u op iets groepeert, u moet groeperen op alles wat u selecteert, wat geen geaggregeerde kolommen zijn (functies zoals som, max, gem).




  1. HOE GEGEVENS OP TE HALEN TUSSEN 2 DATA IN ORACLE SQL DEVELOPER

  2. Elke waarde wordt weergegeven in een nieuwe rij HTML-tabel

  3. Invoegtrigger voorkomen

  4. MySQL:Hoe gebruik ik scheidingstekens in triggers?