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;