2016-10-05 3 views
6

Meine Datenbank sieht wie folgt ausMySQL Hinzufügen und mehrere Spalten Ein Wählen

Tabellenname: Order Details

id  oid  pid pquantity pprice 
-------------------------------------- 
    1  1  5  2  10 
    2  1  6  3  5 
    3  1  7  1  20 
    5  2  8  1  5 
    6  2  9  1  5 
    7  3  5  5  10 

Tabellenname: Aufträge

id  odiscount oshipping 
---------------------------- 
    1  5  5   
    2  0  5   
    3  0  5 

Ich möchte für den Rechnungswert erhalten jede Bestellung. (pquantity*pprice)-odiscount+oshipping. Der schwierige Teil ist, dass jede Bestellung mehrere Einträge in den Bestelldetails enthalten kann. Ich kann also nicht herausfinden, wie ich mich darum kümmern soll. Das Endergebnis sollte

oid total 
1  55 
2  15 
3  55 

Ich habe versucht, dies die folgende SQL verwenden, aber ich bin nicht in der Lage, herauszufinden, wie mehrere Zeilen, um Details zu berücksichtigen.

SELECT SUM((orderdetails.pprice*orderdetails.pquantity) - orders.odiscount + orders.oshipping) FROM orders LEFT JOIN orderdetails ON orderdetails.oid = orders.id GROUP BY orders.id 

Antwort

3

Ich glaube, Sie können dies tun, ohne auch nur mit einer Unterabfrage:

SELECT SUM(od.pquantity*od.pprice) + AVG(o.oshipping - o.odiscount) 
FROM Orders o 
INNER JOIN OrderDetails od 
    ON o.id = od.oid 
GROUP BY o.id 

Demo hier:

SQLFiddle

+1

Was ist falsch bei der Verwendung einer Unterabfrage? – sagi

+0

Ich stimme zu, dass dies wahrscheinlich der Weg ist, aber ich bin sehr verwirrt über die Einstellung zu Kommentaren. – Strawberry

+3

@Strawberry Sagi gibt routinemäßig eine Menge Kommentare zu meinen Antworten ab und schafft so eine Konversation über nichts, mit der Hoffnung, dass seine Antwort makelloser und damit korrekter erscheint als die aller anderen. Kommentar: Diese Taktik scheint wirklich gut zu funktionieren (obwohl ich sie nicht benutze). –

3

Sie könnten Gruppe die order_details Abfrage zuerst, und erst dann kommen sie auf der orders Tabelle:

SELECT sum_details - odiscount + oshipping 
FROM orders o 
JOIN (SELECT oid, SUM(pquantity * pprice) AS sum_details 
     FROM  order_details 
     GROUP BY oid) d ON o.id = d.oid 
Verwandte Themen