我有一个名为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执行此操作,但无法构建工作查询。 任何人都可以帮助我。
提前感谢。
答案 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子句...... 工作...... :)