假设我有一个对象User
的django查询集。每个User
都有一个average_score
。如何根据average_score
确定用户的百分位数(前10%,前20%等)?
如果我能够对查询集进行排序,理论上我可以将索引除以总计数(例如,总计100中的第5位是前5%),但由于我们无法对查询集进行排序 - 我在这里可以做什么?
答案 0 :(得分:1)
更新了代码段以考虑可能的零除错误。
它使用__lte queryset过滤器(Less than or equal to)获得的average_score
小于 queryset = User.objects.all()
total_count = queryset.count()
if total_count:
percentile = float(queryset.filter(average_score__lte=average_score).count())/total_count
else:
return 0.0
的对象数除以数据库中的对象总数。
一切都在数据库端完成,并且(几乎)没有数据来回传输,因此即使数据库中有大量用户对象,它也应该有效工作
var mongoose = require('mongoose');
var bookSchema = mongoose.Schema({
author_id: String,
good: Boolean
});
答案 1 :(得分:1)
几个月前,我有一个类似的问题来查找今年的平均交易,例如下面的脚本。希望可以帮助..
import time
from django import template
from yourapp.models import Transaction
register = template.Library()
now_year = time.strftime("%Y")
@register.simple_tag
def graph_average_income_by_year():
try:
transactions = Transaction.objects.filter(paid=True)\
.filter(payment_date__year=now_year)
count_transactions = transactions.count()
incomes = [ p.total_transfer for p in transactions ]
return ("%.1f" % (float(sum(incomes))/count_transactions) )
except:
return 0.0