You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何筛选奇数行并排除偶数行?

解决方案:PostgreSQL筛选奇数行

原表结构与数据

col1col2
Cell 1Cell 2
Cell 3Cell 4
Cell 5Cell 6
Cell 7Cell 8

创建表的SQL代码:

CREATE TABLE tmp (
  col1 varchar(255) DEFAULT NULL,
  col2 varchar(255) DEFAULT NULL
);
INSERT INTO tmp VALUES ('Cell 1', 'Cell 2');
INSERT INTO tmp VALUES ('Cell 3', 'Cell 4');
INSERT INTO tmp VALUES ('Cell 5', 'Cell 6');
INSERT INTO tmp VALUES ('Cell 7', 'Cell 8');

实现方法

窗口函数(如row_number())确实无法直接在WHERE子句中使用,你可以通过子查询或CTE包装带行号的结果,再在外层筛选奇数行:

方法1:子查询

SELECT col1, col2
FROM (
    SELECT col1, col2, row_number() OVER () AS row_num
    FROM tmp
) AS numbered_rows
WHERE row_num % 2 = 1;

方法2:CTE(公共表表达式)

WITH numbered_rows AS (
    SELECT col1, col2, row_number() OVER () AS row_num
    FROM tmp
)
SELECT col1, col2
FROM numbered_rows
WHERE row_num % 2 = 1;

注意事项

如果需要固定的行顺序(避免因存储顺序变化导致结果不稳定),建议在OVER()中添加ORDER BY子句,比如按col1排序:

row_number() OVER (ORDER BY col1) AS row_num

预期结果

col1col2
Cell 1Cell 2
Cell 5Cell 6

内容的提问来源于stack exchange,提问作者jiayu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:25:20