2017-04-20 2 views
0

Ich bin mir sicher, dass ich etwas falsch mache, weil ich alle Beispiele gefunden habe. Ich bekomme Ergebnisse, verdoppele aber die Gesamtmenge oder verdoppele die Gesamtsumme.MySQL Unterabfrage produziert immer noch doppelte SUM Wert

Die Abfrage ist:

select 

(st.total_cells) as 'Cells Sorted', 

from abstract_freeze af 
left join abstract_ejaculate_collection aec on af.ejaculate_collection_id = aec.id 
left join mo_flo on aec.id = mo_flo.ejaculate_collection_id 
left join sample_time st on mo_flo.id = st.mo_flo_id 
left join collection_schedule cs on aec.collection_schedule_id = cs.id 
left join collection_plan cp on cs.collection_plan_id = cp.id 
left join sub_admission sa on cp.sub_admission_id = sa.id 
left join master_admission ma on sa.master_admission_id = ma.id 
left join animal on ma.animal_id = animal.id 
where aec.tenant_id = 8 and date(aec.scheduled) = '2017-04-12' and sa.type = 'Sexed' 
group by aec.id; 

gibt es mehrere abstract_freeze Datensätze mit demselben ejaculate_collection_id sein, dafür meine SUM (st.total_cells) Duplikate basierend auf der Anzahl von af.ejaculate_collection_id des wiederkehrend.

Ich kann scheinen, meine Anfrage oder Unterabfrage richtig zu bekommen, ich brauche eine Summe von total_cells basierend auf der Gruppierung.

+0

Ich sehe keine Summe irgendwo passiert. Ist das Ihre gesamte Anfrage? –

+0

Entschuldigung, ich habe eine Zeile entfernt, um es zu verkürzen, weil ich mich auf "Zellen sortiert" konzentriert habe, aber es hätte SUM (st.total_cells) lesen sollen. mein Fehler. –

Antwort

0

Wenn Sie mehrere Datensätze pro id dann würden Sie wahrscheinlich SUM wollen pro id und nicht nur die Gesamt, könnten Sie dies versuchen:

select aec.id, SUM(st.total_cells) as 'Cells Sorted', 
from abstract_freeze af 
left join abstract_ejaculate_collection aec on af.ejaculate_collection_id = aec.id 
left join mo_flo on aec.id = mo_flo.ejaculate_collection_id 
left join sample_time st on mo_flo.id = st.mo_flo_id 
left join collection_schedule cs on aec.collection_schedule_id = cs.id 
left join collection_plan cp on cs.collection_plan_id = cp.id 
left join sub_admission sa on cp.sub_admission_id = sa.id 
left join master_admission ma on sa.master_admission_id = ma.id 
left join animal on ma.animal_id = animal.id 
where aec.tenant_id = 8 and date(aec.scheduled) = '2017-04-12' and sa.type = 'Sexed' 
group by aec.id; 
0

Ok, so hatte tatsächlich vor aufsummieren zu verbinden. mit diesem Ended und es hat geklappt richtige Werte zu erhalten:

LEFT JOIN (SELECT tc.mo_flo_id, SUM(tc.total_cells) AS cells FROM sample_time tc GROUP BY mo_flo_id) tc USING (mo_flo_id) 

dann ...

tc.cells AS 'Cells Sorted' 

die richtigen summierten Werte zu erhalten.

Danke für die Hilfe alle.