在 PostreSQL 行中查找模态值

问题描述 投票:0回答:1

我有这样的桌子

WITH  vals (k, v, z) AS (VALUES (0, 0, 1), (1, 2, 1), (1, 0, 0), (5, 4, 6), (0, 0, 0))
select vals.* from vals
k v z
0 0 1
1 2 1
1 0 0
5 4 6
0 0 0

我想计算每一行的模态值。如果有多个模态值,则返回最先出现的值。

k v z 模态
0 0 1 0
1 2 1 1
1 0 0 0
5 4 6 5
0 0 0 0

如何在 PostreSQL 中做到这一点?

postgresql greenplum
1个回答
0
投票

假设只有三个值列,我们可以使用

CASE
表达式来处理您的要求:

SELECT
    k,
    v,
    z,
    CASE WHEN k = v OR z = k THEN k
         WHEN v = z THEN v
         ELSE k END AS modal
FROM vals;

演示

© www.soinside.com 2019 - 2024. All rights reserved.