2015-03-24 112 views
0

我完全不熟悉SQL,並且正在嘗試進行一些在職培訓練習,這些練習目前正在踢我的後端。使用CASE將數據分組爲時間間隔的SQL查詢

我正在嘗試編寫一個查詢,該查詢將查看包含分鐘的表列,名爲CC_To_Dep,並針對某些存儲桶測量該列:0-30Mins,30-60Mins,1-2Hrs,超過2小時,然後返回數據看起來像這樣

Case Count Time 698,523 0-30 Mins 235,888 30-60 Mins 50,853 1-2 Hrs 2,855 Over 2 Hrs

這是我使用並標註有上述時間桶每條記錄,但它不在一起組。我在最後嘗試了一個GROUP BY子句,但它卻發生了錯誤。

SELECT 
(CC_To_Dep) as CaseCount 
,CASE 
WHEN(CC_To_Dep)< 30 THEN '0-30Mins' 
WHEN(CC_To_Dep)>= 30 AND (CC_To_Dep)<= 60 THEN '30-60Mins' 
WHEN(CC_To_Dep)> 60 AND (CC_To_Dep)<= 120 THEN '1-2Hrs' 
ELSE 'Over 2 Hrs' 
END as Time 
FROM Table1 
WHERE YEAR(Arr_date)=2013 

任何幫助表示讚賞。我已經四處尋找答案,但我很難在其他示例中閱讀代碼,然後將其應用於我的情況。有一天我會到達那裏,但今天不是那一天。

+0

什麼是CC_TO_DEP的數據類型。你正在使用哪個數據庫服務器 – 2015-03-24 21:46:47

+1

你正在使用哪些數據庫管理系統? Postgres的?甲骨文? – 2015-03-24 21:47:05

回答

1
SELECT 
CASE 
WHEN(CC_To_Dep)< 30 THEN '0-30Mins' 
WHEN(CC_To_Dep)>= 30 AND (CC_To_Dep)<= 60 THEN '30-60Mins' 
WHEN(CC_To_Dep)> 60 AND (CC_To_Dep)<= 120 THEN '1-2Hrs' 
ELSE 'Over 2 Hrs' 
END as Time 
, count(*) as caseCount 
FROM Table1 
WHERE YEAR(Arr_date)=2013 
group by 
CASE 
WHEN(CC_To_Dep)< 30 THEN '0-30Mins' 
WHEN(CC_To_Dep)>= 30 AND (CC_To_Dep)<= 60 THEN '30-60Mins' 
WHEN(CC_To_Dep)> 60 AND (CC_To_Dep)<= 120 THEN '1-2Hrs' 
ELSE 'Over 2 Hrs' 
END