我已经创建了一个包含Postgres的表格,用于计算电子邮件地址在层次结构的每个级别中显示的次数。层次结构的级别从左到右排序 - 也就是说,区域汇总到品牌,区域汇总到区域,站点汇总到区域。
我的目标是填充列" lowest_distinct_level"具有电子邮件地址不同的最低层级的名称。这是以下发布的示例表:
email_address | brand | region | area | site | lowest_distinct_level
----------------|-------|--------|------|------|----------------------
alpha@gmail.com | 1 | 1 | 1 | 2 |
beta@gmail.com | 1 | 1 | 2 | 0 |
gamma@gmail.com | 1 | 1 | 2 | 2 |
zeta@gmail.com | 1 | 2 | 0 | 0 |
简而言之,对于每一行,我需要找到值最大的最右列,并将该列的名称作为值输出到lowest_distinct_level。有没有一种相对有效的方法来使用PLPGSQL或数组来实现这一目标?我一般不擅长编写脚本或编码,所以如果这是微不足道的话,请道歉。
答案 0 :(得分:2)
这是使用嵌套CASE的基本解决方案:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
}
}
结果如下:
In [307]: df = pd.DataFrame(np.random.randint(0, 1000, (10,3)), columns=list('abc'))
In [308]: df
Out[308]:
a b c
0 755 250 450
1 142 810 460
2 814 268 204
3 534 546 837
4 373 246 266
5 158 775 560
6 451 503 85
7 988 265 703
8 164 503 239
9 578 188 76
In [309]: df.mean()
Out[309]:
a 495.7
b 435.4
c 388.0
dtype: float64
In [310]: df.gt(df.mean(), axis=1).any(1)
Out[310]:
0 True
1 True
2 True
3 True
4 False
5 True
6 True
7 True
8 True
9 True
dtype: bool
In [311]: df.loc[df.gt(df.mean(), axis=1).any(1)]
Out[311]:
a b c
0 755 250 450
1 142 810 460
2 814 268 204
3 534 546 837
5 158 775 560
6 451 503 85
7 988 265 703
8 164 503 239
9 578 188 76
Abelisto写了一个简短的版本:
select email_address, brand, region, area, site,
case when site = 1 then 'site'
else case when area = 1 then 'area'
else case when region = 1 then 'region'
else case when brand = 1 then 'brand'
else ''
end
end
end
end as lowest_distinct_level
from mm;
答案 1 :(得分:1)
这确实可以用数组来解决:
<span>
<img class="hover item-fade" src="" />
</span>