2011-05-11 72 views
7

假设你的结果集,例如:SQL如何通过不同的ID做一个条件总和?

DATE   ID cost  
--------------------------------------- 
01/01/2011 1  10  
01/01/2011 1  10  
01/01/2011 2  10  
01/01/2011 2  10  

我想办法,为每个不同的ID总结成本的值,但只有一次,这样,当我按日期我得到的结果如

DATE   cost 

01/01/2011   20 

我第一次尝试类似

sum(distinct cost) 

但诅咒只返回10 我也试过:

sum(case when distinct id then cost else 0 end) 

,但不是一个功能查询。

+2

您正在使用哪种SQL? – 2011-05-11 22:21:44

+0

给定ID的成本值是否始终相同? – 2011-05-11 22:31:20

+0

这是oracle,我不能按日期和Id进行分组,因为我需要每个日期有一行。 – 2011-05-11 22:33:02

回答

17

我会假设相同的ID在同一天总是会有相同的成本。我也会假设你的RDBMS支持派生表。在这种情况下,这是你想要的东西:

select date, sum(cost) 
from 
    (select distinct date, id, cost from YourTable) 
group by date 

更新

甲骨文派生表不需要别名。

+0

谢谢你的作品 – 2011-05-11 22:37:01

0

在不知道数据库/ SQL引擎:

SELECT日期,萨姆(成本) FROM YourTable GROUP BY日期,ID;

SELECT Date, First(TCost) 
FROM 
(SELECT Date, Sum(Cost) as TCost FROM YourTable GROUP BY Date, ID) 
GROUP BY Date 
+0

除非当然,我对这个问题没有理解。 – MPelletier 2011-05-11 22:27:10

+0

使用这种方法,每个日期都有两个记录。 – 2011-05-11 22:29:34

+0

@WillA我似乎对这个问题的措辞有点麻烦。无论如何,我认为@阿德里安得到了它。 – MPelletier 2011-05-11 22:35:16

1

我认为发布的问题的逻辑存在一些缺陷。

假设你有这样的结果集:

DATE   ID cost  
--------------------------------------- 
01/01/2011 1  10  
01/01/2011 1  15  
01/01/2011 2  10  
01/01/2011 2  10  

应该怎样查询回报?

DATE   cost  
--------------------------------------- 
01/01/2011 20  

DATE   cost  
--------------------------------------- 
01/01/2011 25 

接受的答案将返回35

或者是这样的一套不可能有?

-2

试试这个

SELECT SUM(cost) AS Expr1 
    , ID 
    , date 
FROM (SELECT DISTINCT date 
      , ID 
      , cost 
     FROM table_name AS table_name_1 
     GROUP BY date, ID, cost) AS derivedtbl_1 
GROUP BY ID, date 

或本

SELECT  SUM(cost) AS Expr1, date 
    FROM (SELECT DISTINCT date, ID, cost 
      FROM table_name AS table_name_1 
      GROUP BY date, ID, cost) AS derivedtbl_1 
GROUP BY date 
+0

我希望人们评论什么是错的,当他们downvote。 – matiit 2017-06-01 08:14:22

-2

尝试这个
我使用MySQL的这一点。 DEMO表(表名是 '表名' 1D和成本是 'INT' 的类型)

id | cost 
1 | 15 
1 | 25 
1 | 10 
2 | 25 
2 | 5 
2 | 10 
3 | 20  
3 | 15  
3 | 10  
4 | 20  
4 | 20 


查询使用

select id 
    , SUM(cost) as 'Total Cost' 
    from sumchk 
group by id 

OR(下面一个使用)

select id, sum(cost) as 'Total Cost' 
    from (select * 
      from tablename 
) a 
group by id; 

结果:

id | Total Cost 
    1 | 50 
    2 | 40 
    3 | 45 
    4 | 40 
0

您可以使用此查询。

SELECT dates, Sum(cost) as TCost FROM TABLE_NAME GROUP BY ID