Mysql 按季节分组月份

Mysql 按季节分组月份,mysql,group-by,rows,Mysql,Group By,Rows,我被mysql查询卡住了。我想知道如何按多行分组。我得到了月份,我想按季节将它们组合在一起,因此,例如,我想通过添加01-03月份的所有犯罪来显示犯罪数量,并将其显示为冬季等 这是我目前拥有的代码 SELECT d.month, SUM(c.crimeCount) FROM FYP_Date d JOIN FYP_Crime c WHERE d.dateID=c.dateID GROUP BY month 对于年度和季度,你必须遵守y和q SELECT d.month, SUM(c.crime

我被mysql查询卡住了。我想知道如何按多行分组。我得到了月份,我想按季节将它们组合在一起,因此,例如,我想通过添加01-03月份的所有犯罪来显示犯罪数量,并将其显示为冬季等

这是我目前拥有的代码

SELECT d.month, SUM(c.crimeCount)
FROM FYP_Date d JOIN FYP_Crime c
WHERE d.dateID=c.dateID
GROUP BY month
对于年度和季度,你必须遵守y和q

SELECT d.month, SUM(c.crimeCount), CONVERT(LEFT(d.month, 4), SIGNED) AS y, CONVERT(RIGHT(d.month, 2), SIGNED) AS m, CEIL(CONVERT(RIGHT(d.month, 2), SIGNED)/3) AS q 
FROM FYP_Date d JOIN FYP_Crime c WHERE d.dateID=c.dateID GROUP BY y, q;
最初的问题是如何将月份转换为季度,这是经过编辑的,请参见图片。解决办法是:

SELECT d.month, SUM(c.crimeCount), CEIL(month/3) AS q 
FROM FYP_Date d JOIN FYP_Crime c WHERE d.dateID=c.dateID GROUP BY q
定义了列“月到年-月”后,上面提到的解决方案将更新

对于年度和季度,你必须遵守y和q

SELECT d.month, SUM(c.crimeCount), CONVERT(LEFT(d.month, 4), SIGNED) AS y, CONVERT(RIGHT(d.month, 2), SIGNED) AS m, CEIL(CONVERT(RIGHT(d.month, 2), SIGNED)/3) AS q 
FROM FYP_Date d JOIN FYP_Crime c WHERE d.dateID=c.dateID GROUP BY y, q;
最初的问题是如何将月份转换为季度,这是经过编辑的,请参见图片。解决办法是:

SELECT d.month, SUM(c.crimeCount), CEIL(month/3) AS q 
FROM FYP_Date d JOIN FYP_Crime c WHERE d.dateID=c.dateID GROUP BY q
定义列“月到年”后,上面提到的解决方案将更新。

这里有一个选项,使用带有月份的case语句:

另外请注意-加入时,请使用on来匹配您的记录,而不是使用where。

这里有一个选项,使用带有月份的案例陈述:

另外请注意-加入时,请使用on来匹配您的记录,而不是使用where。

此功能可能对您有所帮助:

select quarter(concat(d.month,'-01')) as qrt, 
       sum(c.crimecount)
  from fyp_date d join fyp_crime c on d.dateid=c.dateid
 group by qrt;
这和本赛季不一样,但很接近。我假设您的月份列是char,因此我在计算中添加了“-01”,因为quarter至少需要一天来处理。

这里的函数可能有帮助:

select quarter(concat(d.month,'-01')) as qrt, 
       sum(c.crimecount)
  from fyp_date d join fyp_crime c on d.dateid=c.dateid
 group by qrt;

这和本赛季不一样,但很接近。我假设您的月份列是char,因此我在计算中添加了一个'-01',因为quarter至少需要一天来处理。

至少不能处理我的MySQL,因为选择月份'2016-01';给出空值。但是,@PerlDog-ah,我假设它是一个日期字段-没有看到编辑。如果是这样的话,这个月就必须进行相应的转换。实际上我更喜欢你的解决方案——以前从未使用过+为此我向你致敬!实际上我也没有从来都不需要它。您的优点是OP可以将值更改为,例如。。。在11,12,1中,然后是“冬季”。至少不会与我的MySQL一起工作,因为选择了月份“2016-01”;给出空值。但是,@PerlDog-ah,我假设它是一个日期字段-没有看到编辑。如果是这样的话,这个月就必须进行相应的转换。实际上我更喜欢你的解决方案——以前从未使用过+为此我向你致敬!实际上我也没有从来都不需要它。您的优点是OP可以将值更改为,例如。。。在11,12,1,然后是“冬天”。@recycler更新您的答案。。。根据amaze3的说法,这是不可能的working@recycler更新你的答案。。。按照amaze3的说法,它不工作