2009-06-28 10 views
1

Ich habe dieses sql:Gesamtanzahl der Spalten in mySQL!

SELECT * , (
xnum * xprice 
) AS amount, SUM(xnum * xprice) AS total 
FROM xxbasket 
LEFT JOIN xxsubproduct 
USING (xsubproduct_id) 
LEFT JOIN xxcolor 
USING (xcolor_id) 
WHERE xuserid = '3' 

wenn ich SUM (xNum * xPreis) als Gesamt es gibt mir nur eine Zeile, aber wenn ich diese Summe entfernen (xNum * xPreis) ist es gib mir alle Zeilen

Meine Frage ist, wie kann ich Summe bekommen? während ich alle Zeilen aus der Abfrage brauche?

+1

Es ist nicht vollkommen klar, da es scheint, als ob Sie versuchen, zwei Dinge mit einer Abfrage zu tun. Entweder bremse es in zwei Abfragen oder schreibe zwei Unterabfragen und mache dann einen JOIN. – mfloryan

+0

@mfx Ich weiß nicht, wie man Unterabfragen erstellen kann, bitte erklären Sie, wie Sie Unterabfragen erstellen und sie zusammenfügen?! – mehdi

+0

ok, ich brechen in zwei Unterabfragen wie diese SELECT *, ( xNum * xPreis ) AS Menge, xxcolor.xcode AS Farbe, xxsubproduct.xcode AS Produktcode ( SELECT SUM (xNum * xPreis) VON xxbasket WHERE xuserid = '3' ) AS Gesamt VON xxbasket LEFT JOIN xxsubproduct weiter verwenden (xsubproduct_id) LEFT JOIN xxcolor weiter verwenden (xcolor_id) WHERE xuserid = '3' es jetzt funktioniert, aber Zahlen sind irrelevant! – mehdi

Antwort

2

Summe ist eine Funktion, bei der die Summe Ihres Werts (xnum * xprice) für alle ausgewählten Zeilen berechnet wird. Das Ergebnis ist eine Zeile.

Wenn Sie die Summe mehrerer Gruppen von Zeilen berechnen möchten, können Sie die GROUP BY-Klausel verwenden, die Spalten zu Gruppen gruppiert (z. B. GROUP BY Benutzer-ID anstelle Ihrer WHERE-Klausel würde SUM (xnum * xprice) für alle berechnen) Benutzer)

0

Die Funktion SUM() ist ein Aggregatoperator. Die Auswahl, der es zugeordnet ist, kann nicht mehr einzelne Zeilen, sondern nur Informationen über Gruppen von Zeilen zurückgeben.

Aber Sie könnten die Summe in einer Unterabfrage zurückgeben. Hier ist ein Beispiel, vorausgesetzt, die Spalte xprice ist in der xxsubproduct Tabelle: