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
Zojirushi 31 Dez. 2015 im 18:03

2 Antworten

Beste Antwort

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äß.

1
Felypp Oliveira 31 Dez. 2015 im 15:50

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.

1
Oooogi 31 Dez. 2015 im 15:40