Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL按名称、月份、年份分组的数字总和_Mysql_Sql_Group By - Fatal编程技术网

Mysql SQL按名称、月份、年份分组的数字总和

Mysql SQL按名称、月份、年份分组的数字总和,mysql,sql,group-by,Mysql,Sql,Group By,我有下表 Name | Number | Date ACB | 2 | 01.01.1970 ACB | 3 | 02.01.1970 ABC | 1 | 01.02.1970 DEF | 10 | 01.01.1970 DEF | 20 | 01.02.1970 我正在寻找一个SQL查询,它会给出这样的结果 Name | Sum | Month | Year ABC | 5 | 01 | 1970 ABC | 1 |

我有下表

Name | Number | Date
ACB  |      2 | 01.01.1970
ACB  |      3 | 02.01.1970
ABC  |      1 | 01.02.1970
DEF  |     10 | 01.01.1970
DEF  |     20 | 01.02.1970
我正在寻找一个SQL查询,它会给出这样的结果

Name | Sum | Month | Year
ABC  |   5 |    01 | 1970
ABC  |   1 |    02 | 1970
DEF  |  10 |    01 | 1970
DEF  |  20 |    02 | 1970
我能做的就是对一个名字的所有条目求和

SELECT Name, SUM(Number) AS Sum FROM table GROUP BY Name
只要尝试以下操作,我就会得到一个错误“'mon'未在表中找到”

在GROUP语句中包含MONTH()函数也没有帮助,在这种情况下,DB会抛出一个“意外的”(“)错误


感谢您的帮助!

子句指定了结果集中唯一的行。
groupby
子句指定了月份和年份,因此应该在
groupby
中:

SELECT Name, SUM(Number) AS Sum, MONTH(Date) AS mon, YEAR(Date) as year
FROM table
GROUP BY Name, MONTH(Date), YEAR(Date) ;

您也可以使用
子查询

select distinct Name, MONTH(Date) AS mon, YEAR(Date) as year,
       (select sum(t1.Number) 
        from table t1 
        where t1.Name = t.Name and
              MONTH(t1.Date) = MONTH(t.Date) and 
              YEAR(t1.Date) =  YEAR(t.Date)
       ) as Sum
from table t;

请参阅:MySQL日期和时间函数需要data.time数据类型;如果您以MM.DD.YYYY格式向我们显示日期,则不太可能正确存储日期。如果它是一个新的数据库,或者甚至是一个可以更改的旧数据库,我将修复表结构;如果您不能,则需要使用string fu进行自己的字符串解析n选项,而不是日期选项。
date
列的数据类型是什么?它看起来不像是日期格式。此外,这是MySQL还是Microsoft SQL Server?如果MySQL在这方面出错,它可能会在当月()调用;但是SQL Server的某些版本不允许使用GROUP BY中SELECT中的别名。您没有什么意义。您知道,从该表上的该查询生成该错误消息是不可能的。如最后一句所述,将这些函数添加到GROUP BY语句会引发错误。@l487804…什么类型的e错误?这种语法应该可以。
select distinct Name, MONTH(Date) AS mon, YEAR(Date) as year,
       (select sum(t1.Number) 
        from table t1 
        where t1.Name = t.Name and
              MONTH(t1.Date) = MONTH(t.Date) and 
              YEAR(t1.Date) =  YEAR(t.Date)
       ) as Sum
from table t;