Ich habe also drei Tische. 1: Geschäft - besteht aus einer ID und einem Namen, 2: Geld - besteht aus der Personen-ID und dem Geld, das sie verdienen, 3: Person - besteht aus der Personen-ID und der Geschäfts-ID, bei der sie arbeiten.
MySQL fügt Werte aus der Abfrage ein
Was ich tun möchte, ist, alle Unternehmen zu durchlaufen, die ID abzurufen und diese ID dann in meiner SQL-Abfrage zu verwenden, um das Gesamtgeld pro Unternehmen zu erhalten.
Ich versuche, alle Zeilen im Geschäft durchzugehen und das Gesamtgeld, das das Geschäft schuldet, in eine neue Tabelle einzufügen. Ich kann leicht die Summe der Gesamtbeträge eines Unternehmens ermitteln, indem ich einen Join am Geld- und Geschäftstisch mache.
Ich bin ziemlich neu in SQL, aber was ich online gesehen habe, ist, dass ein Cursor angemessen sein kann. Ich habe mich nur gefragt, ob dies der effizienteste Weg ist oder ob mir etwas fehlt.
Danke für jede Hilfe!
EDIT: AKTUALISIERT MIT TABELLENSTRUKTUR
Geschäft: business_id int, Geschäft varChar
Geld: person_id int, Geld schweben
Person: person_id int, business_id int
Es tut mir leid, es ist nicht detaillierter / besseres Format. Ich habe versucht, es aus SQL zu kopieren und einzufügen, aber es hat es beim Stapelüberlauf schrecklich formatiert.
2 Antworten
So fügen Sie alle Gesamtsummen ein:
insert into business_payout (business_id, money_owed, date)
select bs.business_id, sum(mn.money), curdate()
from business bs
inner join person pr on 1=1
and pr.business_id = bs.business_id
inner join money mn on 1=1
and mn.person_id = pr.person_id
group by bs.business_id
Ich habe diese Abfrage nicht getestet, aber ich denke, sie funktioniert ordnungsgemäß.
Ich versuche, eine Formel zu erstellen, die eine Summe aus Spalte B ergibt, bis sich in Spalte A etwas ändert.
CREATE FUNCTION `GetBusinessTotalSum`(business_id int(11)) RETURNS decimal(10,3) CHARSET utf8
DETERMINISTIC
BEGIN
declare total_sum decimal(10,3);
...
/* set total_sum to the total sum */
...
RETURN total_sum;
END
Dann würde ich einfach in die neue Tabelle einfügen. Nennen wir das Beispiel "business_total_sums" mit zwei Feldern:
Business_id int
Total_sum decimal (10,3)
Zuerst würde ich eine benutzerdefinierte Funktion erstellen, die die business_id abruft und die Gesamtsumme ausgibt, die das Unternehmen schuldet.
insert into business_total_sums (business_id, total_sum)
select business_id, GetBusinessTotalSum(business_id) from Business
Und eine andere Sache, ich würde das Feld "Geld" in Ihren Tabellen von float in decimal ändern, da Gleitkommazahlen nicht die genauen Werte beibehalten, die Sie in sie einfügen, sondern eine Darstellung von nom / denom, die (fast) dasselbe erzeugt Wert. z.B. 14.4999999999 ist fast wie 14.5. Dezimalstellen repräsentieren Geldfelder besser.
Neue Fragen
mysql
MySQL ist ein kostenloses Open-Source-RDBMS (Relational Database Management System), das SQL (Structured Query Language) verwendet. Verwenden Sie dieses Tag NICHT für andere DBs wie SQL Server, SQLite usw. Dies sind verschiedene DBs, die alle ihre eigenen SQL-Dialekte verwenden, um die Daten zu verwalten.