我正在寻找一种方法来返回多个病例计数。
我有一个巨大的桌子,有10个miljon +行和10 +列。现在我想计算两种不同情况下的金额。
让我们说我有一个有年龄的栏目和一个有高度的栏目,我想填写这张表:
10 - 15, 15 - 20, 20 - 25 ..... 65 - 70, 70+
-150cm
150-155cm
155-160cm
160-165cm
165-170cm
....
200+cm
由于这是很多数据,我不想问这个问题而不是问题,如果我能以表格形式得到结果(而不是一行......),我更喜欢。
有什么建议吗? (在postgres db上运行)
修改
感谢 kordirko 我认为这样做了,因此我现在陷入了“错误:用作表达式的子查询返回的多行”所以我无法对实际数据进行尝试。
在实际数据中,我得到类似“年龄”的东西,但“高度”看起来像这样:
case
...
when (st_intersects(line, (select geom from passage_lines where id = 3))
and (bearing > 20 and bearing <= 190))
and st_intersects(line, (select geom from passage_lines where id = 4)) then 3
...
end as route
from tbl1
where date in (valid_dates)
(从passage_lines中选择geom,其中id = 3)返回一个几何(一个passage_line)。 valid_dates 是一个找到有效日期的声明。
我想查看具有相同日期的所有行,对于“第一个”交叉点,我只想选择带有方位的行 em> 20-190。 (一个行与 passage_line 不相交,因此每个日期有很多行。)
可以理解吗??
答案 0 :(得分:1)
尝试:
WITH xxx as (
SELECT *,
CASE
WHEN height < 150 THEN ' -150cm'
WHEN height >= 150 AND height < 155 THEN '150-155cm'
WHEN height >= 155 AND height < 160 THEN '155-160cm'
......
......
WHEN height >= 195 AND height < 200 THEN '195-200cm'
ELSE '200+cm'
END As height_groups
FROM "huge table with 10 miljon"
)
SELECT height_groups,
SUM( Case when age < 10 then 1 else 0 end ) as "0 - 10",
SUM( Case when age >= 10 and age < 15 then 1 else 0 end ) as "10 - 15",
SUM( Case when age >= 15 and age < 20 then 1 else 0 end ) as "15 - 20",
SUM( Case when age >= 20 and age < 25 then 1 else 0 end ) as "20 - 25",
.....
.....
SUM( Case when age >= 65 and age < 70 then 1 else 0 end ) as "65 - 70",
SUM( Case when age >= 70 then 1 else 0 end ) as "70+"
FROM xxx
GROUP BY height_groups
ORDER BY height_groups
此查询只会读取一次表格。