我困在一個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
我困在一個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
下面是一個使用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
記錄。
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;
對於年份和季度你必須compine 「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
定義列「月」,以「年 - 月」,該解決方案是上面(更新)後述。
也許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
需要(至少)一天工作。
是不行的(至少在我的MySQL),因爲'選擇月('2016-01 ');'給出NULL。但是JOIN ... ON爲+1。 – PerlDuck
@PerlDog - 啊,我認爲這是一個日期字段 - 沒有看到編輯。如果是這樣的話,這個月將不得不相應轉換。我更喜歡你的解決方案 - 以前從未使用過'quarter'。爲你+1! – sgeddes
其實我也沒有。 :-)從不需要它。您的好處是OP可以將值更改爲例如'...(11,12,1)然後'冬天'。 – PerlDuck