添加四个参数值时,注释sum n

2024-03-29 07:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是django1.4和python2.7。你知道吗

我在计算一些值的和。。。当我这么做的时候,这个工作非常完美:

CategoryAnswers.objects.using('mam').filter(category=cat["category"], brand=cat["brand"], category__segment_category=cat["category__segment_category"]).values('category__name', 'brand__name','brand__pk').annotate(total=Sum('answer'))

并生成查询:

    SELECT `category`.`name`, `brand`.`name`, `category_answers`.`brand_id`, SUM(`category_answers`.`answer`) AS `total` 
FROM `category_answers` 
INNER JOIN `category` 
ON (`category_answers`.`category_id` = `category`.`id`) 
INNER JOIN `brand` 
ON (`category_answers`.`brand_id` = `brand`.`id`) 
WHERE (`category_answers`.`category_id` = 6  AND 
`category_answers`.`brand_id` = 1  AND 
`category`.`segment_category_id` = 1 ) 
GROUP BY `category`.`name`, `brand`.`name`, `category_answers`.`brand_id` 
ORDER BY NULL

但当我添加一个新值时,这不起作用:

CategoryAnswers.objects.using('mam').order_by().filter(category=cat["category"], brand=cat["brand"], category__segment_category=cat["category__segment_category"]).values('category__name','category__pk','brand__name','brand__pk').annotate(total=Sum('answer'))

看到返回的查询,问题是django add-on group by a wrong field(category_answers.id):

SELECT `category`.`name`, `category_answers`.`category_id`, `brand`.`name`, `category_answers`.`brand_id`, 
SUM(`category_answers`.`answer`) AS `total` 
FROM `category_answers` 
    INNER JOIN `category` 
      ON (`category_answers`.`category_id` = `category`.`id`) 
    INNER JOIN `brand` 
      ON (`category_answers`.`brand_id` = `brand`.`id`) 
WHERE (`category_answers`.`category_id` = 6  AND 
`category_answers`.`brand_id` = 1  AND 
`category`.`segment_category_id` = 1 ) 
    GROUP BY `category_answers`.`id`, `category`.`name`, `category_answers`.`category_id`, `brand`.`name`, `category_answers`.`brand_id` 
ORDER BY NULL

如果我删除任何参数这项工作,所以我不相信这是问题的具体参数。。。我做错什么了吗?你知道吗


Tags: andanswernameidbyonsegmentcat
1条回答
网友
1楼 · 发布于 2024-03-29 07:20:43

我不能解决这个问题,所以。。。我使用原始SQL查询执行此操作:

cursor = connections["mam"].cursor()        
cursor.execute("SELECT B.name, A.category_id, A.brand_id, SUM(A.answer) AS total, C.name FROM category_answers A INNER JOIN category B ON A.category_id = B.id INNER JOIN brand C ON A.brand_id = C.id WHERE A.brand_id = %s AND A.category_id = %s AND B.segment_category_id = %s", [cat["brand"],cat["category"],cat["category__segment_category"]])
c_answers = cursor.fetchone()

这不是最好的方法,但很有效。:)

相关问题 更多 >