如何从SQLAlchemy中的ID池中获得每组的前n个结果?

容阿卜

我有两张桌子。第一个代表article一个,第二个代表news_cluster一个每个包含一个数组)。articles_id

我需要获得19最好news_cluster再拿到4篇最好的文章对每个news_cluster(按顺序l_score column)。

目前我获取所有articles_id来自全国19个news_cluster与SQLAlchemy的,然后我通过对它们进行排序news_cluster,并l_score使用Python:

all_news_obj = News.query.order_by(score).limit(19)
all_ids = sum([a_news.articles_id for a_news in all_news_obj], [])
all_articles = Articles.query.filter(Articles.id.in_(all_ids)).all()
articles_sorted = 4_best_l_score_sorted_by_cluster(all_articles)

我在想,如果有一个更快的方法来获取和整理这些文章,我看到,你可以由集群(news_id),并获得前4名l_score的各与此PSQL查询:

SELECT ranked.* FROM 
(SELECT articles.*, rank() OVER (PARTITION BY news_id ORDER BY l_score DESC)
    FROM articles
    WHERE id = ANY(ARRAY[209146, 209140, 209154...])
) ranked
WHERE rank <=4

因此,如果psql首先处理排序可能会更快,但是我不知道如何在SQLAlchemy中实现此查询。

容阿卜

我的问题主要在这里得到回答:将等级和分区查询转换为SqlAlchemy

我只需要使其适应我的Articles模型,并添加一个过滤器以匹配其中的ID all_ids_array

subquery = db.session.query(
    Articles,
    func.rank().over(
        order_by=Articles.l_score.desc(),
        partition_by=Articles.news_id
    ).label('rank')
).filter(Articles.id.in_(all_ids_array)).subquery()

articles_sorted = db.session.query(subquery).filter(subquery.c.rank <= 4)

我是一个快乐的人:比获取所有文章并随后使用python对其进行排序要快0.1秒。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获得每组中n个最常见的物品

来自分类Dev

Vertica中每组查询的前N个

来自分类Dev

如何正确获得以下SQL查询以选择组中的前N个结果?

来自分类Dev

在Elasticsearch中获取每组的前n个值

来自分类Dev

如何获得Django中的前N个元素?

来自分类Dev

MSSQL SELECT - 每组获得一个结果

来自分类Dev

猪:每组获取前n个值

来自分类Dev

猪:获取每组的前n个值

来自分类Dev

获得前3个结果

来自分类Dev

如何对查询进行分组并随机获得每组第n个项目

来自分类Dev

在psql中选择每组的前5个得分结果

来自分类Dev

如何根据Laravel中的ID匹配从3个不同的表中最佳获得结果。

来自分类Dev

如何根据Laravel中的ID匹配从3个不同的表中最佳获得结果。

来自分类Dev

查看Oracle中的前N个结果

来自分类Dev

如何在 SQLAlchemy/Postgres 中限制每个 `group_by` 的 N 个结果?

来自分类Dev

我如何获得woocommerce中的前三个post_id?

来自分类Dev

如何使用带有最大命中文档的其余查询从 Elastic 搜索中获得前 10 个结果?

来自分类Dev

Java的8个流,如何获得前N个计数?

来自分类Dev

如何从SQLAlchemy JOIN中的两个表返回结果?

来自分类Dev

使用 Flink Sql 选择每组前 N 个

来自分类Dev

从 r 中的每组中选择前五个值

来自分类Dev

如何从2个单独的JavaFX Service线程中获得结果?

来自分类Dev

在MySQL中,如何获得9个选择结果的交集?

来自分类Dev

如何从2个单独的JavaFX Service线程中获得结果?

来自分类Dev

如何从一个表中获得结果,而另一个表中的ID不在一个表中

来自分类Dev

如何将N个数字分成N / 2组(每组2个数字),以使每组中2个数字之间的差总和最小?

来自分类Dev

如何获得每组最早的记录

来自分类Dev

如何从一个表获得结果,而另一个表中的ID不在一个表中

来自分类Dev

熊猫:通过汇总折叠每组中的前n行

Related 相关文章

  1. 1

    如何获得每组中n个最常见的物品

  2. 2

    Vertica中每组查询的前N个

  3. 3

    如何正确获得以下SQL查询以选择组中的前N个结果?

  4. 4

    在Elasticsearch中获取每组的前n个值

  5. 5

    如何获得Django中的前N个元素?

  6. 6

    MSSQL SELECT - 每组获得一个结果

  7. 7

    猪:每组获取前n个值

  8. 8

    猪:获取每组的前n个值

  9. 9

    获得前3个结果

  10. 10

    如何对查询进行分组并随机获得每组第n个项目

  11. 11

    在psql中选择每组的前5个得分结果

  12. 12

    如何根据Laravel中的ID匹配从3个不同的表中最佳获得结果。

  13. 13

    如何根据Laravel中的ID匹配从3个不同的表中最佳获得结果。

  14. 14

    查看Oracle中的前N个结果

  15. 15

    如何在 SQLAlchemy/Postgres 中限制每个 `group_by` 的 N 个结果?

  16. 16

    我如何获得woocommerce中的前三个post_id?

  17. 17

    如何使用带有最大命中文档的其余查询从 Elastic 搜索中获得前 10 个结果?

  18. 18

    Java的8个流,如何获得前N个计数?

  19. 19

    如何从SQLAlchemy JOIN中的两个表返回结果?

  20. 20

    使用 Flink Sql 选择每组前 N 个

  21. 21

    从 r 中的每组中选择前五个值

  22. 22

    如何从2个单独的JavaFX Service线程中获得结果?

  23. 23

    在MySQL中,如何获得9个选择结果的交集?

  24. 24

    如何从2个单独的JavaFX Service线程中获得结果?

  25. 25

    如何从一个表中获得结果,而另一个表中的ID不在一个表中

  26. 26

    如何将N个数字分成N / 2组(每组2个数字),以使每组中2个数字之间的差总和最小?

  27. 27

    如何获得每组最早的记录

  28. 28

    如何从一个表获得结果,而另一个表中的ID不在一个表中

  29. 29

    熊猫:通过汇总折叠每组中的前n行

热门标签

归档