【问题标题】:django DISTINCT: COUNT vs lendjango DISTINCT:计数与 len
【发布时间】:2014-10-26 20:07:02
【问题描述】:

我有一个带有一些字段的模型 M,其中三个定义了排序。让我们称它们为a,b,c。所以我有 ordering = ["a", "b", "c"]。

我的问题是:

n = M.objects.values_list ('a', flat=True).distinct()
n.count() --> 217
len(n) --> 26580

这怎么可能?

我使用 Python 2.7、Django 1.6 和 MySQL。

谢谢!

【问题讨论】:

    标签: mysql sql django


    【解决方案1】:

    documentation on distinct() 说明了这一点:

    如果您使用values() 查询来限制选定的列,则任何order_by()(或默认模型排序)中使用的列仍将涉及,并可能影响结果的唯一性。

    如果你用你自己的覆盖默认模型排序,它应该可以工作:

    n = M.objects.order_by('a').values_list('a', flat=True).distinct()
    

    (尽管如果a 是相关字段,文档中还有一些警告。)

    【讨论】:

    • 谢谢,但是 count 与 len 有什么不同?
    • @EllaShar:嗯,我们谈论的是两种不同的 SQL 语句和两种不同的计数方法。您必须查看生成的 SQL 才能真正理解它。 len 的许多结果是有道理的,因为您的 distinct() 被应用于 a, b, and c 而不是像您想要的那样只是 aCOUNT 版本似乎没有遇到这个问题。
    猜你喜欢
    • 2012-12-28
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多