2016-06-18 7 views
0

Ich lerne derzeit SQL und ich bin erforderlich, um einige SQL-Abfragen auszuführen. Es gibt eine bestimmte Abfrage, die ich nicht implementieren kann.SQL Abfrage Max Wert einer Zusammenfassung

Welche Kunden haben die (absolut) teuersten Bestellungen?

customerid und total value aller Aufträge des gleichen Kunden müssen Ergebnis zurückgegeben werden.

Der Tisch ist:

Salesorderheader:

salesorderid (int) customerid (int) totaldue (double) 
     1     32000   3.20000 

Das Datenbanksystem verwende ich Postgresql ist. Die Abfrage, die ich so weit gekommen ist:

SELECT totaldue, customerid 
FROM salesorderheader 
WHERE totaldue = (SELECT max(totaldue) FROM salesorderheader); 

Diese Abfrage falsch ist, weil ein neuer Wert als total_value (Gesamtwert aller Aufträge des gleichen Kunden) markiert oder etwas ähnliches muss stattdessen zurückgegeben werden.

Ich weiß dort, dass die SQL-Funktion sum() kombiniert mit GROUP BY customerid) verwendet werden muss, aber bisher konnte ich die richtige Abfrage nicht implementieren.

Vielen Dank für Ihre Zeit.

HINWEIS: wenn ich brach alle Aufstellungsortrichtlinien oder diesen Beitrag Duplikat ist mir jetzt lassen und ich werde diesen Beitrag löschen sofort

Sample for table

enter image description here

Antwort

1

dies von den Kunden größte expences gibt :

SELECT distinct max(totaldue) over (partition by customerid),customerid 
FROM salesorderheader 
order by 1 desc 
; 

Dies zeigt den verschwenderischsten Client zwischen n all:

select sum(totaldue) over (partition by customerid),customerid 
    FROM salesorderheader 
    order by 1 desc 
limit 1 
    ; 
+0

Vielen Dank für Ihre Antwort, aber Ihre Abfrage ist falsch.Ich benötige den maximalen Gesamtwert aller Bestellungen desselben Kunden. zum Beispiel, wenn jemand 1 Bestellung mit 120 hat, da ein Wert kleiner ist als jemand, der 5 Bestellungen von 50 Wert hat –

+0

Ich sehe deine Tabelle nicht, aber das sollte den Trick machen - bedenke die Ausgabe ist nicht begrenzt –

+0

Noch ist das Ergebnis falsch. Ich habe einen Screenshot von meiner Tabelle hochgeladen (meide die irrelevanten Spalten). Ich denke, die Verwendung von 'sum()' ist erforderlich, um die Abfrage –

1

wählen top 1 customer_id, sum (total_due) als Gesamt

in #top

von Salesorderheader

Gruppe von customer_id

Sortieren nach sum (total_due) desc;

select * from #top t

Exklusionsverknüpfung Salesorderheader SOH

auf soh.customer_id = t.customerid;

drop table # top;

Ich entschuldige mich für die Formatierung, ich bin auf Handy

+0

Eric Ich kann nicht herausfinden, was die Form Ihrer tatsächlichen Abfrage ist. Sobald ich überprüfe, ob es funktioniert –

+0

Es tut mir leid, ich wusste nicht, dass dies eine Frage über Postgres war. Die Syntax ist anders, aber die Idee ist die gleiche. Gruppieren Sie nach Kundennummer und wählen Sie die Kundennummer und die Summe des Betrags und begrenzen Sie die Ergebnisse auf eine Zeilenreihenfolge nach der Summe des absteigenden Betrags (dies gibt Ihnen die ID und die Summe des Betrags für den Kunden mit der größten Summe) Werte in eine temporäre Tabelle und verbinden Sie sie dann wieder mit der Kundenauftrags-Header-Tabelle in der Kunden-ID. Danach löschen Sie die temporäre Tabelle, damit Sie die Abfrage bei Bedarf erneut ausführen können. – Eric

+0

Lesen Sie Ihre anderen Kommentare, die Sie suchen der Kunde mit der größten Einzelbestellung? Fügen Sie in diesem Fall einfach eine weitere Gruppierungsebene hinzu (auf der die Bestellung eindeutig identifiziert wird) für die Abfrage, die die temporäre Tabelle auffüllt. Dadurch erhalten Sie die Kunden-ID mit der größten Einzelbestellung. – Eric