Ich bin ziemlich neu in MySQL und arbeite an einer Abfrage, die die Daten aus einer Spalte in einer Tabelle durch die Daten aus einer Spalte in einer anderen Tabelle teilen sollte. Ich hatte eine gute Jagd auf der Website, kann aber nicht das finden, wonach ich suche (oder es könnte ein Mangel an Verständnis meinerseits sein). Ich möchte den TotalSpend von TotalHires teilen und denke, dass ich ziemlich nah dran bin, aber es ist nicht ganz richtig.Wie teile ich Daten aus einer Spalte in einer Tabelle mit Daten aus einer Spalte in einer anderen Tabelle?
Ich habe 4 Zeilen von Daten in jeder Spalte und bin auf der Suche nach 4 Berechnungen ausgeführt werden. Im Moment werden 16 Ergebnisse zurückgegeben. Ich möchte nur Daten teilen, die sich auf dieselbe Mitglieds-ID beziehen, denke aber, dass jede Zelle in einer Spalte durch jede Zelle in der anderen Spalte geteilt wird. Wie kann ich meinen Code ändern, um nur die gewünschten 4 Berechnungen zurückzugeben?
Gesamtausgaben:
SELECT garment_hire_header.member_id, garment_hire_line.hire_id, SUM(garment_hire_line.days*catalogue.daily_rate) AS 'Total Spend'
FROM garment_hire_line
JOIN garment_hire_header ON garment_hire_line.hire_id = garment_hire_header.hire_id
JOIN garment ON garment_hire_line.garment_id = garment.garment_id
JOIN catalogue ON garment.catalogue_id = catalogue.catalogue_id
Group by garment_hire_header.member_id
TotalHires:
SELECT garment_hire_header.member_id, COUNT(garment_hire_header.hire_id) as TotalHires
FROM garment_hire_header
Group by garment_hire_header.member_id
Fast endgültige Code arbeiten (liefert 16 Berechnungen):
SELECT s.TotalSpend/h.TotalHires
from (SELECT SUM(garment_hire_line.days*catalogue.daily_rate) AS TotalSpend
FROM garment_hire_line
JOIN garment_hire_header ON garment_hire_line.hire_id = garment_hire_header.hire_id
JOIN garment ON garment_hire_line.garment_id = garment.garment_id
JOIN catalogue ON garment.catalogue_id = catalogue.catalogue_id
Group by garment_hire_header.member_id) s CROSS JOIN
(SELECT COUNT(garment_hire_header.hire_id) as TotalHires
FROM garment_hire_header
Group by garment_hire_header.member_id) h
Jetzt, wo das funktioniert Ich bin versuchen, es ein wenig zu drücken des Weiteren. Ich möchte nur die Daten angezeigt werden, wenn die hire_id in einer anderen Frage gefunden wird
Ich habe versucht, die folgende Zugabe, die in der Vergangenheit auf verschiedene Abfragen, aber aus irgendeinem Grund nicht funktioniert in diesem Fall gearbeitet hat:
WHERE garment_hire_line.hire_id IN
(SELECT hire_id, DATE_ADD(date_out, INTERVAL (days) DAY) AS 'Expected Return', DATEDIFF(return_date, DATE_ADD(date_out, INTERVAL (days) DAY)) as 'Days Late'
FROM garment_hire_line
WHERE DATEDIFF(return_date, DATE_ADD(date_out, INTERVAL (days) DAY)) > 0
ORDER BY hire_id)
Hallo Martyn. Vielen Dank, das bringt zurück, was ich suchte. Ich denke, ich habe es übertrieben, Dinge zu verkomplizieren, wenn ich verschiedene Dinge ausprobiere. Ihre Antwort hat mich dazu veranlasst, einen Schritt zurück zu machen und neu zu bewerten. Ich könnte die Dinge in Zukunft etwas anders angehen. Prost! – Lumsden