Django:在外键上区分,然后排序

本瓦德

我有两个模型,TrackPairPair有一个track1track2popularity我正在尝试通过成对的流行程度(降序)获得有序列表,没有两个对具有相同的track1到目前为止,这是我尝试过的方法:

lstPairs = Pair.objects.order_by('-popularity','track1__id').distinct('track1__id')[:iNumPairs].values_list('track1__id', 'track2__id', 'popularity')

这给了我以下错误:

ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions

...所以我尝试了这个:

lstPairs = Pair.objects.order_by('-popularity','track1__id').distinct('popularity', 'track1__id')[:iNumPairs].values_list('track1__id', 'track2__id', 'popularity')

这给了我重复track1__ids的条目有谁知道解决这个问题的方法吗?我猜我将不得不使用raw()或类似的方法,但是我不知道如何解决这样的问题。我将PostgreSQL用于数据库后端,因此DISTINCT应受支持。

姿势

首先,让我们澄清一下:DISTINCT是标准SQL,DISTINCT ON而是PostgreSQL扩展。

错误(DISTINCT ON expressions must match initial ORDER BY expressions)表示您应该修正ORDER BY子句,而不是DISTINT ON(如果这样做,您将得到不同的结果,就像您已经体验过的那样)。

DISTINCT ON表达式(一个或多个)必须最左边的ORDER BY表达式(S)相匹配。ORDER BY子句通常将包含其他表达式,这些表达式确定每个DISTINCT ON组中所需的行优先级。

这将为您带来预期的结果:

lstPairs = Pair.objects.order_by('track1__id','-popularity').distinct('track1__id')[:iNumPairs].values_list('track1__id', 'track2__id', 'popularity')

在SQL中:

SELECT DISTINCT ON (track1__id) track1__id, track2__id, popularity
FROM pairs
ORDER BY track1__id, popularity DESC

但是可能顺序错误。

如果您想要原始订单,则可以在此处使用子查询:

SELECT *
FROM (
  SELECT DISTINCT ON (track1__id) track1__id, track2__id, popularity
  FROM pairs
  ORDER BY track1__id
  -- LIMIT here, if necessary
)
ORDER BY popularity DESC, track1__id

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“分组”然后排序

来自分类Dev

Postgres GROUP BY,然后排序

来自分类Dev

AngularJS:分组然后排序

来自分类Dev

Vimscript函数选择块然后排序

来自分类Dev

Excel SortFields添加然后排序

来自分类Dev

Excel SortFields添加然后排序

来自分类Dev

Javascript拖放文件,然后排序

来自分类Dev

拆分列表然后排序

来自分类Dev

使用Django在Postgres ArrayField上区分大小写的搜索

来自分类Dev

按字母排序代表卡片的元组列表,然后排序

来自分类Dev

MySQL排序依据,然后排序选择依据

来自分类Dev

Django对外键区分大小写的对象进行排序

来自分类Dev

是否有其他选择可插入然后排序

来自分类Dev

向量(插入然后排序)或设置速度更快的方法是哪种?

来自分类Dev

如何汇总与数组中匹配的值然后排序

来自分类Dev

Mongodb-合并子文档中的数组,然后排序

来自分类Dev

合并然后排序两个xml文件

来自分类Dev

PHP遍历XML文件,放入数组,然后排序

来自分类Dev

在一列上区分,按另一列排序

来自分类Dev

找到确切位置,然后插入还是添加,然后排序?哪个更好?

来自分类Dev

读取CSV文件,然后排序,然后再次使用数组

来自分类Dev

VB.net 排序列然后排序但保留行位置

来自分类Dev

GET后排序

来自分类Dev

查询返回具有特定日期范围编号的文档,然后对其进行排序然后排序

来自分类Dev

Django Query,在外键上不同

来自分类Dev

获取List <T>中最常见的项目,然后排序

来自分类Dev

正则表达式搜索,可视块结果,然后排序

来自分类Dev

熊猫DataFrame将字符串转换为日期,然后排序带来失败

来自分类Dev

选择最少两行,然后排序(不完整分组)

Related 相关文章

热门标签

归档