当前位置:  开发笔记 > 后端 > 正文

使用distinct后如何执行order_by?

如何解决《使用distinct后如何执行order_by?》经验,为你挑选了0个好方法。

我想根据两个字段获取唯一的结果后对结果进行排序。我遇到的问题是我无法在Django中使用两个ord​​er_by。每当您使用此功能时,Django都会清除前一个order_by()

每个order_by()调用都会清除以前的所有顺序。

型号示例:

class Product(models.Model):
    price = models.FloatField()
    name = models.CharField(max_length=100)
    group = models.CharField(max_length=100)

我想获得同一组中价格最低的产品。然后,我想按价格对它们进行排序。像这样:

Product.objects.order_by('group','price').distinct('group').order_by('price')
Product.objects.order_by('group','price').distinct('group').order_by('-price')

问题是,如果仅按一阶使用,我会得到不同的产品。

-

编辑

表示例:

id | name | group | price
0  | aaa  | aaa   | 10.0
1  | aaa  | aaa   | 1.0
2  | aaa  | aaa   | 2.0
3  | aaa  | aaa   | 1.0
4  | bbb  | bbb   | 2.0
5  | bbb  | bbb   | 2.1
6  | bbb  | bbb   | 10.0

按价格排序:

1  | aaa  | aaa  | 1.0
4  | bbb  | bbb  | 2.0

按价格排序:

4  | bbb  | bbb  | 2.0
1  | aaa  | aaa  | 1.0

我的问题是,当我使用order_by排序时,返回的产品是不同的。

在sql语句中将是这样的:

SELECT * 
FROM product
WHERE id IN (
  SELECT DISTINCT ON 
  (group) id
  FROM product
  ORDER BY group ASC, price ASC
)
ORDER BY price DESC

我正在使用PostgreSQL

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有