漆黑天使复活 2021-03-23 17:44 采纳率: 44.4%
浏览 282
已结题

django orm 分类统计求和并排名

有一个表 top1brand sales1 top2brand sales2 top3brand sales 3 city 李宁 10000 耐克 8000 阿迪 7000 上海 耐克 20000 特步 10000 回力 3000 上海 求上海地区,排名销售排名前三的品牌 有啥好的思路?

  • 写回答

2条回答 默认 最新

  • 易冷天涯 2021-03-29 17:04
    关注

    假设你这个表结构如下:
    top1brand sales1 top2brand sales2 top3brand sales3 city
    李宁 10000 耐克 8000 阿迪 7000 上海 
    耐克 20000 特步 10000 回力 3000 上海

    也就是

    class S(models.Model):
        top1brand = models.CharField(max_length=4)
        sales1 = models.IntegerField(default=0)
        top2brand = models.CharField(max_length=4)
        sales2 = models.IntegerField(default=0)
        top3brand = models.CharField(max_length=4)
        sales3 = models.IntegerField(default=0)

    那么我建议可以这样,用以下三条分别取出
    sales_1 sales_2 sales_3 的前三,最后再做一个对比。

    S.objects.filter(city='上海').values('top1brand').order_by().annotate(Sum('sales1')).order_by('-sales1__sum')
    S.objects.filter(city='上海').values('top2brand').order_by().annotate(Sum('sales2')).order_by('-sales2__sum')
    S.objects.filter(city='上海').values('top3brand').order_by().annotate(Sum('sales3')).order_by('-sales3__sum')

    其实,如果表格结构是下面这个情况,那就简单多了。

    class S(models.Model):
        brand = models.CharField(max_length=4)
        sales = models.IntegerField(default=0)

    解法:

    S.objects.filter(city='上海').order_by('-sales').values()
    评论

报告相同问题?

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算