2016-03-01 23 views
1

我困在一個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 

enter image description here

回答

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記錄。

+0

是不行的(至少在我的MySQL),因爲'選擇月('2016-01 ');'給出NULL。但是JOIN ... ON爲+1。 – PerlDuck

+0

@PerlDog - 啊,我認爲這是一個日期字段 - 沒有看到編輯。如果是這樣的話,這個月將不得不相應轉換。我更喜歡你的解決方案 - 以前從未使用過'quarter'。爲你+1! – sgeddes

+0

其實我也沒有。 :-)從不需要它。您的好處是OP可以將值更改爲例如'...(11,12,1)然後'冬天'。 – PerlDuck

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; 

對於年份和季度你必須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 

定義列「月」,以「年 - 月」,該解決方案是上面(更新)後述。

+0

沒有工作 – armze3

+0

@recycler更新你的答案......按amaze3不工作 – zee

+0

更新它 - 新的答案被引述 – recycler

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需要(至少)一天工作。