我有一个名为“Users”的字段,我想在该字段上运行SUM(),返回所有DISTINCT记录的总和。我认为这样可行:
SELECT SUM(DISTINCT table_name.users)
FROM table_name
但是它没有选择DISTINCT记录,它只是运行就好像我运行了SUM(table_name.users)。
如果只添加此字段中的不同记录,我该怎么做?
答案 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)
答案 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
自己尝试一下 的 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
首先获取不重复列表...
SELECT SUM(SQ.COST) FROM (SELECT DISTINCT [Tracking #] as TRACK,[Ship Cost] as COST FROM YourTable) SQ