我在Postgres订了桌位
| ID|标题|......这是什么?|
| --|--|--|
| 1 |标题1|......这是什么?|
| 2 |标题2|......这是什么?|
| 3 |标题1|......这是什么?|
| 4 |标题13|......这是什么?|
| 5 |标题4|......这是什么?|
| 6 |标题7|......这是什么?|
| 7 |标题1|......这是什么?|
| 8 |标题1|......这是什么?|
| 9 |标题53|......这是什么?|
| 10 |标题11|......这是什么?|
| 11 |标题1|......这是什么?|
我有一个Golang应用程序,它使用一个ORM作为ORM,
我需要选择列id和title,其中title应该是不同的,并且应该有按id的键集分页。
1 -标题1 2 -标题2 4 -标题13
2D页面应该是
5 -标题4 6 -标题7 9 -标题53
任何想法都是受欢迎的,甚至行SQL
2条答案
按热度按时间0aydgbwb1#
您可以首先选择所有唯一的标题作为一个集合,然后从表中获取它们的id。例如:
字符串
编辑:如果你在这个表中有大量的数据,你可以进一步优化查询,首先限制和跳过唯一的标题,然后获取它们的id:
型
dluptydi2#
假设
id
是UNIQUE NOT NULL
,这就实现了你的目标:字符串
fiddle
值得注意的是,
DISTINCT ON
不能与在同一查询级别上不一致的ORDER BY
组合。请参阅:但是使用
DISTINCT ON
的中间步骤禁用了直接索引支持。仍然可以使用带有前导title
字段的索引,但是必须为每个查询处理整个表(或者仅索引扫描中的索引)。实际上不是“键集分页”。如果可能的话,在
id
上创建一个索引MATERIALIZED VIEW
。也就是说,您可以在刷新之前重用生成的结果足够长的时间。型
可选的
INCLUDE
子句启用仅索引扫描(在其上运行VACUUM
或VACUUM ANALYZE
之后,除非autovacuum
已启动)。根据数据分布情况,
DISTINCT ON
查询可能会进一步优化。请参阅:现在的查询只是:
型