2015-03-24 107 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