我想从下表中检索与日期和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
答案 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中的所有非聚合列分组到组中是很好的。