PostgreSQL中如何筛选奇数行并排除偶数行?
解决方案:PostgreSQL筛选奇数行
原表结构与数据
| col1 | col2 |
|---|---|
| Cell 1 | Cell 2 |
| Cell 3 | Cell 4 |
| Cell 5 | Cell 6 |
| Cell 7 | Cell 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
预期结果
| col1 | col2 |
|---|---|
| Cell 1 | Cell 2 |
| Cell 5 | Cell 6 |
内容的提问来源于stack exchange,提问作者jiayu
相关产品推荐
相关产品推荐

