在Django QuerySet中统计字段wertung内字母'r'的出现总数
统计Django QuerySet中字段内所有'r'的总次数
方法一:数据库层面计算(高效,适合大数据量)
利用数据库字符串函数直接计算每个字段中'r'的数量再求和,无需把所有数据拉到Python内存中:
from django.db.models import Sum, Func, Value, F # 为每条记录计算'r'的数量,再汇总总和 total_r = protokoll.annotate( r_count=( Func(F('wertung'), function='LENGTH') - Func(Func(F('wertung'), Value('r'), Value(''), function='REPLACE'), function='LENGTH') ) ).aggregate(total=Sum('r_count'))['total'] or 0
原理:通过REPLACE把字段里的所有'r'替换为空字符串,用原字段长度减去替换后的长度,得到单个字段中'r'的出现次数,最后用Sum聚合得到总次数。
方法二:Python层面遍历统计(简单直观,适合小数据量)
如果数据量不大,可以直接拉取字段值到Python中遍历统计:
total_r = 0 # 仅获取wertung字段,减少数据传输开销 for wertung in protokoll.values_list('wertung', flat=True): if wertung: # 处理字段为空的情况 total_r += wertung.count('r')
内容的提问来源于stack exchange,提问作者pitweazle
相关产品推荐
相关产品推荐

