我有这样的桌子
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 中做到这一点?
假设只有三个值列,我们可以使用
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;