用于DISTINCT记录的SQL Server SUM()

时间:2013-11-15 20:49:52

标签: tsql

我有一个名为“Users”的字段,我想在该字段上运行SUM(),返回所有DISTINCT记录的总和。我认为这样可行:

SELECT SUM(DISTINCT table_name.users)
FROM table_name

但是它没有选择DISTINCT记录,它只是运行就好像我运行了SUM(table_name.users)。

如果只添加此字段中的不同记录,我该怎么做?

8 个答案:

答案 0 :(得分:4)

此代码似乎表示sum(distinct)和sum()返回不同的值。

with t as (
select 1 as a 
union all
select '1'
union all
select '2'
union all
select '4'
)

select sum(distinct a) as DistinctSum, sum(a) as allSum, count(distinct a) as distinctCount, count(a) as allCount from t

你真的有非独特的价值吗?

select count(1), users
from table_name
group by users
having count(1) > 1

如果没有,总和将是相同的。

答案 1 :(得分:3)

使用count()

SELECT count(DISTINCT table_name.users)
FROM table_name

SQLFiddle demo

答案 2 :(得分:1)

您可以通过以下示例自行查看不同的作品。在这里,我创建一个具有重复值的子查询,然后我对这些值做一个不同的总和。

select DistinctSum=sum(distinct x), RegularSum=Sum(x)
from
(

    select x=1
    union All
    select 1
    union All
    select 2
    union All
    select 2

) x

您可以看到,此示例中,distinct sum列返回3,常规sum返回6。

答案 3 :(得分:0)

您可以使用子查询:

select sum(users)
from (select distinct users from table_name);

答案 4 :(得分:0)

;WITH cte
as
  (
  SELECT table_name.users , rn = ROW_NUMBER() OVER (PARTITION BY users  ORDER BY users) 
          FROM table_name
  )
SELECT SUM(users)
FROM cte 
WHERE rn = 1

SQL Fiddle

自己尝试一下 的 TEST

DECLARE @table_name  Table (Users INT );
INSERT INTO @table_name Values (1),(1),(1),(3),(3),(5),(5);

;WITH cte
as
  (
  SELECT users , rn = ROW_NUMBER() OVER (PARTITION BY users  ORDER BY users)
     FROM @table_name
  )
SELECT SUM(users) DisSum
FROM cte 
WHERE rn = 1

<强>结果

DisSum
9

答案 5 :(得分:0)

SUM(DISTINCTROW table_name.something) 

它对我有用(innodb)。

说明 - &#34; DISTINCTROW根据整个重复记录省略数据,而不仅仅是重复的字段。&#34; http://office.microsoft.com/en-001/access-help/all-distinct-distinctrow-top-predicates-HA001231351.aspx

答案 6 :(得分:0)

如果情况很难在sum子句中编织一个“ distinct”,通常可以在整个查询中添加一个额外的“ where”子句-类似于:

select sum(t.ColToSum)
from SomeTable t
where (select count(*) from SomeTable t1 where t1.ColToSum = t.ColToSum and t1.ID < t.ID) = 0

答案 7 :(得分:0)

可能与 Trying to sum distinct values SQL

根据Declan_K's answer

首先获取不重复列表...

SELECT SUM(SQ.COST)
FROM 
(SELECT DISTINCT [Tracking #] as TRACK,[Ship Cost] as COST FROM YourTable) SQ