django去重后聚合达到不到分组计数的效果

场景是巡检扫描泵房的巡检点二维码,有重复扫描情况,要得出一个周期中每个泵房扫描了几个点。思路是先去重,再分组计数。

opccount=Cruisepoint.objects.filter(cruise__in=onecruise).distinct().order_by('num').values('pumphouse').annotate(Count('pumphouse')) 效果却不是想要的,而是下面这样 {'pumphouse': 10, 'pumphouse__count': 1}, {'pumphouse': 10, 'pumphouse__count': 1}, {'pumphouse': 21, 'pumphouse__count': 2}, {'pumphouse': 21, 'pumphouse__count': 1}, {'pumphouse': 27, 'pumphouse__count': 1} 请教怎么实现下面这种结果 {'pumphouse': 10, 'pumphouse__count': 2}, {'pumphouse': 27, 'pumphouse__count': 3}

评论 1

  • Count()中有个特性distinct=True。 personcruisecount = onecruise.values('person__name').annotate(Count('cruisepoint_id', distinct=True)) 上面的语句应为: opccount = Cruisepoint.objects.filter(cruise__in=onecruise).values('pumphouse').annotate(Count('num',distinct=True)).