我很难得到结果
这是我的数据集
| 一种 | 乙 | C | cnt |
|---|---|---|---|
| 2 | 1 | 2 | |
| 1 | 5 | 5 | |
| 2 | 1 | 4 | |
| 1 | 1 | 1 |
预期结果
| 一种 | 乙 | C | cnt |
|---|---|---|---|
| 2 | 1 | 2 | 2 |
| 1 | 5 | 5 | 2 |
| 2 | 1 | 4 | 3 |
| 1 | 1 | 1 | 1 |
PG 9.5
针对VALUES表的相关子查询应该可以解决问题:
SELECT
t.A, t.B, t.C,
(SELECT COUNT(DISTINCT v.n) FROM (VALUES(t.A),(t.B),(t.C)) AS v(n)) AS cnt
FROM table t
Run Code Online (Sandbox Code Playgroud)
如果您想对计数和求和等值进行单独计算,则可以使用横向连接(又名 APPLY) overVALUES代替:
SELECT A, B, C ,D, E, v.countDistinct, v.countNotNull, v.Total
FROM test,
LATERAL (
SELECT COUNT(DISTINCT v.n), COUNT(v.n), SUM(v.n)
FROM (VALUES (A),(B),(C), (D), (E)) AS v(n)
) AS v(countDistinct, countNotNull, Total)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |