gpt4 book ai didi

sql - 按不同表中的列有效排序

转载 作者:行者123 更新时间:2023-11-29 12:16:57 25 4
gpt4 key购买 nike

我们目前正在尝试改进一个系统,该系统允许用户按未显示的字段过滤和排序大型对象列表(> 100k)。由于可以动态选择字段,我们计划也动态构建查询。

这听起来并不难,基础知识也很容易完成,但问题在于数据的结构。在某些情况下,将需要一些或多或少昂贵的连接,这可能会导致相当昂贵的查询,尤其是当这些连接被组合时(即 select * from table join some_expensive_join join another_expensive_join ...)。

过滤不会是一个大问题,因为我们可以使用交集。

但是,排序将要求我们首先构建一个包含所有必要数据的表,如果通过带有所有这些连接的巨大选择语句来完成,这将变得非常昂贵。

所以问题是:是否有更有效的方法来做到这一点?

我可以这样想:

  • 对第一列进行选择查询并按此排序
  • 对于基本上具有相同顺序(例如相同值)的所有元素,执行另一个查询来解决该问题
  • 重复上述步骤,直到顺序明确或我们用完排序标准

这有意义吗?如果是,如何在 Postgresql 9.4 中完成此操作(我们目前无法升级到 9.5+ 解决方案,尽管 welcome 目前无济于事)。

最佳答案

这有帮助吗,还是太微不足道了? (子查询可以是预制连接 View )


SELECT t0.id, t0.a,t0.b,t0.c, ...
FROM main_table t0
JOIN ( SELECT t1.id AS id
, rank() OVER (ORDER BY whatever) AS rnk
FROM different_tables_or_JOINS
) AS t1 ON t1.id=t0.id

JOIN ( SELECT t2.id AS id
, rank() OVER (ORDER BY whatever) AS rnk
FROM different_tables_or_JOINS2
) AS t2 ON t2.id=t0.id

...

ORDER BY t1.rnk
, t2.rnk
...
, t0.id
;

关于sql - 按不同表中的列有效排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48184179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com