Sql Django查询仅对特定列计数
为什么Django的Sql Django查询仅对特定列计数,sql,django,count,django-queryset,Sql,Django,Count,Django Queryset,为什么Django的count()会产生类似这样的SQL查询 选择计数(*) 有没有一种方法可以仅仅依靠一列数据 例如,具有具有以下行的模型: -身份证 -名字 -姓 与在类似于“选择计数(id、名字、姓氏)”的*上运行计数不同,我只想运行 选择计数(id) 或者最好执行选择计数(1)。我想这样做是因为我曾经听说,对于大型桌子来说,这样做会更快 注意:如果不是更快,问题是如何使用Django进行查询。因此,请不要用将其标记为重复。如果目的是计算列x中没有空值的行,则应使用Django的聚合:
count()
会产生类似这样的SQL查询
选择计数(*)
有没有一种方法可以仅仅依靠一列数据
例如,具有具有以下行的模型:
-身份证
-名字
-姓
与在类似于“选择计数(id、名字、姓氏)”的*
上运行计数不同,我只想运行
选择计数(id)
或者最好执行选择计数(1)
。我想这样做是因为我曾经听说,对于大型桌子来说,这样做会更快
注意:如果不是更快,问题是如何使用Django进行查询。因此,请不要用将其标记为重复。如果目的是计算列
x
中没有空值的行,则应使用Django的聚合
:
MyModel.objects.aggregate(Count('x'))
但是,如果您的目的是加快查询速度,那么这是毫无意义的,因为SELECT COUNT(*)
或SELECT COUNT(x)
的速度与前面解释的速度完全相同。试试这个
Entry.objects.values_list('field_name', flat=True).count()
你说的“一行数”是什么意思?你到底想数多少?“请具体点。”迪克格洛顿我更新了问题。希望这能让事情变得更清楚。注意:如果您对可能包含空值的列执行
COUNT(id)
,您将收到不同的结果,因为包含空值的行将不会被计数。如果您确实需要,请使用Django的aggregate
。