使用sum获取列的最大值

时间:2012-10-27 09:52:05

标签: sql sql-server sql-server-2008 tsql

我有一张包含以下数据的表格。

saleId amount date
-------------------------
  1     2000  10/10/2012
  2     3000  12/10/2012
  3     2000  11/12/2012
  2     3000  12/10/2012
  1     4000  11/10/2012
  4     6000  10/10/2012

从我的表中我想要的结果是在10/10/2012和12/10/2012之间的最大金额,对于上面的数据将是:

saleId  amount 
---------------
1       6000
2       6000
4       6000

这里6000是总和的最大值(按saleId)所以我想要ID 1,2和4。

2 个答案:

答案 0 :(得分:4)

你必须使用这样的子查询:

SELECT saleId , SUM(amount) AS Amount
FROM Table1
GROUP BY saleId
HAVING SUM(amount) = 
( 
  SELECT MAX(AMOUNT) FROM
  (
      SELECT SUM(amount) AS AMOUNT FROM Table1
      WHERE date BETWEEN '10/10/2012' AND '12/10/2012'
      GROUP BY saleId
  ) AS A
)

See this SQLFiddle

答案 1 :(得分:2)

此查询仅在表格中进行一次并且相当优化。

select top(1) with ties saleid, amount
from (
  select saleid, sum(amount) amount
  from tbl
  where date between '20121010' and '20121210'
  group by saleid
  ) x
order by amount desc;

您可以使用WHERE子句作为派生表生成SUM,然后使用WITH TIES在查询中选择SELECT TOP(1)以显示具有相同(MAX)数量的所有子句。

向SQL Server提供日期时,请尝试始终使用格式YYYYMMDD来提高稳健性。