2017-05-07 105 views
0

任务:编写查询以生成发票总数,所有发票的发票总计,最小发票金额,最大发票金额和平均值的所有发票。SQL Server中使用最小值,最大值,平均值的子查询

我迄今为止尝试:

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; 

我继续运行时得到一个错误。不知道我是否把子查询放在正确的地方。

+0

什么是你的错误?你有没有考虑过简单地把每个聚合到其自己的子查询?这可能不会产生最佳性能,但满足要求。 – Filburt

回答

0

您可以使用子查询,如下:

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 

如SUM本身只返回一个值,你不能选择总和最小的...而且你的语法本身是不正确的

+0

第二行应该是** SUM(A.TotalSales)AS TotalSales ** –

相关问题