2015-12-03 76 views
0

我有一个数据库,我试图计算总的取消和更改。问题是它们在数据库中是重复的行,我只想为每个id使用一行。在下面的例子中,我希望我的最终计数是取消:5,更改:1。总和部分正常工作,但MIN(id)选择每一行并进行计算,而不是每个ID只有一行。 。感谢您的帮助,我已经包含下面SQL MIN不能正常工作

cancellations | changes | id |orderNumber | 
--------------|---------|-----|------------| 
3    |1  | 5 |4   | 
3    |1  | 5 |4   | 
2    |0  | 7 |5   | 


SELECT SUM(cancellations),SUM(changes) 
FROM table_1 
WHERE id = (SELECT MIN(id)) 
AND orderNumber > 3 
AND (cancellations >0) AND id = (SELECT  
MIN(id)) 
+1

你能告诉我们一些数据行桌子? – Ajay2707

+1

您是否也可以根据OP中的示例显示所需的输出? – tshoemake

+0

@tshoemake对于上表,它只会计数id 5行中的一个。因此,最终的取消次数为3 + 2 = 5,变化为1 + 0 = 1 – user3071909

回答

0

我的SQL你必须使用DISTINCT

SELECT 
    SUM(cancellations), SUM(changes) 
FROM (
    SELECT DISTINCT * FROM table_1 
) AS t 
+0

我收到一个错误消息,“每个派生表都必须有自己的别名” – user3071909

+0

你确定把't'放在子查询上。 –

+0

这只是一个数字而不是正确的总数。他们的方法是使它在ID上唯一吗? – user3071909

0

我不知道我理解正确的您的要求,但你在寻找这样的事情?

SELECT id, SUM(distinct cancellations),SUM(distinct changes) 
FROM table 
group by id 
0

没关系,没看到mysql标记。很确定它不支持ctes。

With cte 
as (
select cancellations, changes, id, orders, 
    ROW_NUMBER() OVER (PARTITION BY id 
          ORDER BY id DESC) RN 
from table1 
) 
select 
sum(cancellations) as cancellationtotal, 
sum(changes) as changetotal 
from cte 
where rn<=1 

Fiddle Demo

1

我打破了您的查询的部分为较小的,并提出了整个查询出此SQL小提琴零件,Fiddle Here