假设我有一个包含以下列的表格:
ID
第 1 列
第2栏
第3栏
第 4 栏
。 .
*请注意,我有 50 个这样的列 ('col1'...'col50')
对于每一行,我想计算以“col”开头的列数(例如 col1、col2 等),这些列还包含特定的整数值(例如 0)。
如果我的数据是:
Id, Col1, Col2, Col3, Col4
0, 0, 1, 2, 1
1, 1, 2, 0, 1
2, 1, 0, 5, 0
3, 0, 0, 0, 4
我的结果是:
Id, Count
0, 1
2, 1
2, 2
3, 3
显然这需要扩展到 50 列,所以我不想对列名称进行硬编码(我需要使其动态/循环)。我还将用我正在寻找的其他值重复这一点,问题的实质可以简化为上述结果。
我不知道如何实现这一点。我想到了一个函数,它接受列名、查找值和计数器,然后返回总的和当前的计数器位置或其他内容。我必须执行 WHILE 循环来调用该函数,直到达到结束计数器。
目标是替换一些有用但令人眼花缭乱且不可重复使用的东西(有 50 列):
case col1 当 0 then 1 else 0 end + case col col1 当 0 then 1 else 0 end...
最佳答案
with t(id, col1, col2, col3, col4) as (values
(0,0,1,2,1),
(3,0,0,0,4))
select * from t cross join lateral (
select count(*) as cnt
from json_each_text(to_json(t))
where key like 'col%' and value = '0') as j;
关于PostgreSQL:计算一行中包含值的列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50143270/