我被困在一个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
答案 0 :(得分:3)
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;
这与赛季不同,但它非常接近。我假设您的month
列为char
,因此我为计算添加了'-01'
,因为quarter
需要(至少)一天的工作时间。
答案 1 :(得分:1)
以下是使用case
month
语句的一个选项:
select case when month(d.month) in (1,2,3) then 'q1',
when month(d.month) in (4,5,6) then 'q2',
when month(d.month) in (7,8,9) then 'q3',
when month(d.month) in (10,11,12) then 'q4'
end as quarter,
SUM(c.crimeCount)
FROM FYP_Date d
JOIN FYP_Crime c ON d.dateID=c.dateID
GROUP BY 1
另请注意 - 加入时,请使用on
来匹配您的记录,而不是使用where
。
答案 2 :(得分:0)
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 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
将列“月”定义为“年 - 月”后,上面提到了解决方案(更新)。