创建列的范围桶

时间:2016-08-17 11:04:40

标签: sql h2

我有一个名为test_table的基表,我正在计算年龄,它按照预期进行。

以下是我用于年龄计算的查询。

select acol,
       DATEDIFF(hour,CONVERT(DATEADD('SECOND', (epoch_time)/1000, DATE '1970-01-01'), DATE), CURRENT_TIMESTAMP()) AS age
from test_table;

但是现在我想要创建不同的年龄范围列,这些列将通过修改现有查询显示为结果。

范围是:

1000-2000

2000-3000

3000-4000

ACOL       AGE  
MAG        1168
MAG        2168
MAG        3168
MAG        1100
MAG        2168
PNB        1672
MUM        1600
MUM        2696
MUM        3696
MUM        1696

成功查询后的结果必须如下表所示。

ACOL 1000-2000  2000-3000 3000-4000
MAG      2          2          1
PNB      1          0          0
MUM      2          1          1

我知道我们可以使用select case执行此操作,但无法构建工作查询。 任何人都可以帮助我。

提前感谢。

2 个答案:

答案 0 :(得分:3)

您可以将条件聚合与CASE表达式一起使用:

SELECT t.ACOL,
       SUM(CASE WHEN t.AGE >= 1000 AND t.AGE < 2000 THEN t.AGE ELSE 0 END) AS `1000-2000`,
       SUM(CASE WHEN t.AGE < 3000 THEN t.AGE ELSE 0 END) AS `2000-3000`,
       SUM(CASE WHEN t.AGE < 3000 AND t.AGE < 4000 THEN t.AGE ELSE 0 END) AS `3000-4000`
FROM
(
    SELECT ACOL,
           DATEDIFF(HOUR, CONVERT(DATEADD(SECOND, (epoch_time)/1000, DATE '1970-01-01'), DATE), CURRENT_TIMESTAMP()) AS AGE
    FROM test_table
) t
GROUP BY t.ACOL

答案 1 :(得分:0)

    for File in Filenames:
    print ('... processing file :',File)
    with open(File, 'r') as csvfile:
        Reader = csv.reader(csvfile, delimiter = ';')           
        for Line in Reader:
            print(Line)

修改了from子句...... 工作...... :)