首页 > 解决方案 > 在 postgres 中,如何将奇数索引的值与偶数索引的值相除?

问题描述

假设我有一张桌子

ind | val
----+----
1   | 0.11
2   | 0.12
3   | 0.13
4   | 0.14
5   | 0.15
6   | 0.16

我想将偶数元素除以奇数元素。所以我想返回类似的东西

ind2 | val2
----+----
1   | 0.12/0.11
2   | 0.14/0.13
3   | 0.16/0.15

我可以运行什么 SQL 查询来输出所需的格式?

感谢您的任何帮助。


更多关于我的情况。我真的从一个数组表开始。对于选定的行,我想获取数组并将数组的偶数元素除以数组的奇数元素。

当我想将奇数和偶数元素相加时,我做了类似的事情

SELECT
  "timestamp" AS "time",
  ((ind-1)-(ind-1)%2)/2 AS frequency,
  20*LOG(SQRT(SUM(val*val))) as vna_data
FROM 
v_recent_vna_reflection,
UNNEST(value_cal) WITH ORDINALITY a(val,ind)
WHERE
  id = (SELECT MAX(id) FROM v_recent_vna_reflection)
GROUP BY timestamp, frequency 

但是除法不是一个有意义的聚合函数。

标签: sqlpostgresql

解决方案


您可以对您询问的有关行的问题使用聚合。你可能想问另一个关于数组的问题。

select ceiling(id / 2.0) as id,
       max(val) filter (where id % 2 = 0) / max(val) filter (where id % 2 = 1) as ratio
from t
group by ceiling(id / 2.0);

推荐阅读