如何从mysql表中求和重复值

时间:2018-04-12 12:46:37

标签: mysql sum sql-order-by

我想从下表中检索与日期和ref_nr列相关的重复美元金额的总和

uid         date       USD      Ref_Nr
1     2018-04-11    1       7 
1     2018-04-11    2       7
1     2018-04-11    3       8
1     2018-04-11    4       8
1     2018-04-11    6       6
1     2018-04-11    6       6 
1     2018-04-10    3       7
1     2018-04-10    5       7
1     2018-04-10    2       8
1     2018-04-10    2       8

这是我的sql查询和我尝试过的,但是我没有得到正确的输出,请帮助我

SELECT  uid 
     ,  date 
     , SUM(USD) AS USD 
     ,  Ref_Nr  
  FROM my_table
 GROUP 
    BY `date`;

这是预期的输出

uid         date       USD      Ref_Nr 
1     2018-04-11    3       7  
1     2018-04-11    7       8 
1     2018-04-11    12      6 
1     2018-04-10    8       7 
1     2018-04-10    4       8

1 个答案:

答案 0 :(得分:1)

SELECT  uid 
     ,  date 
     , SUM(USD) AS USD 
     ,  Ref_Nr  
  FROM my_table
 GROUP 
    BY `date`, Ref_Nr, uid;

在这种情况下,您必须在组中包含Ref_Nr才能获得所需的结果。根据样本数据,uid是不需要的;但总是按照组中的选择中的非聚合字段进行分组是明智的。这在mySQL中工作的唯一原因是因为他们extend the group by;大多数其他RDBMS会抛出关于组中缺少的非聚合字段的错误。在5.7.5及更高版本中,默认情况下禁用此功能,默认情况下先启用。

至于为什么组中需要ref_nr:

mySQL引擎认为您只想按日期分组。因此,所有ref_NR都汇总在一起,系统只需每个日期选择一个即可显示;同样适用于uid;但既然它们都是一样的;你不在乎。这与ref_nr的情况相同。

因此,要解决此问题,只需将ref_nr添加到添加UID的商品中。因此,将select中的所有非聚合列分组到组中是很好的。

相关问题