2017-05-07 3 views
0

Aufgabe: Schreiben Sie eine Abfrage, um die Gesamtzahl der Rechnungen, die Rechnungssumme für alle Rechnungen, den kleinsten Rechnungsbetrag, den größten Rechnungsbetrag und den Durchschnitt zu generieren von allen Rechnungen.Unterabfrage in SQL Server mit Min, Max, Avg

Mein Versuch so weit:

SELECT 
    COUNT(DISTINCT Lines.inv_number) as NumberOfInvoices, 
    SUM(Lines.line_price * Lines.line_units) as TotalSales, 
    MIN(SELECT SUM(Lines.line_price * Lines.line_units) 
     FROM dbo.Lines 
     INNER JOIN dbo.Invoices ON Invoices.inv_number = Lines.inv_number 
     GROUP BY Invoices.cus_code) as MinimumSale, 
    MAX(Lines.line_price * Lines.line_units) as LargestSale, 
    AVG(Lines.line_price * Lines.line_units) as AverageSale 
FROM 
    dbo.Lines 
INNER JOIN 
    dbo.Invoices ON Invoices.inv_number = Lines.inv_number; 

Ich halte einen Fehler immer beim Laufen. Ich bin mir nicht sicher, ob ich die Unterabfrage an die richtige Stelle setze.

+0

Was die Fehler, den Sie erhalten, ist ? Haben Sie darüber nachgedacht, jedes Aggregat einfach in seine eigene Unterabfrage zu setzen? Dies führt möglicherweise nicht zu optimaler Leistung, erfüllt aber die Anforderung. – Filburt

Antwort

0

können Sie verwenden Unterabfrage als unten:

SELECT COUNT(A.InvNumber) AS NumberOfInvoices 
     ,A.TotalSales 
     ,MIN(A.TotalSales) AS MinimumSale 
     ,MAX(A.TotalSales) AS LargestSale 
     ,AVG(A.TotalSales) AS AverageSale 
    FROM (
      SELECT 
        Lines.InvNumber 
       ,SUM(Lines.line_price*Lines.line_units) AS TotalSales 
      FROM dbo.Lines INNER JOIN dbo.Invoices 
       ON Invoices.inv_number=Lines.inv_number 
      GROUP BY Lines.InvNumber 
      ) A 

Sie können nicht mindestens auf Summe wählen als SUM sich nur Wert Eins zurück ... Auch Ihre Syntax selbst ist nicht korrekt

+0

zweite Zeile sollte ** SUM (A.TotalSales) AS TotalSales ** sein –

Verwandte Themen