需要帮助来形成具有多个聚合的查询集

时间:2019-01-29 18:05:37

标签: django django-models

我定义了以下模型:

class TestCaseResult(models.Model):
    run_result = models.ForeignKey(
        RunResult,
        on_delete=models.CASCADE,
    )
    name = models.CharField(max_length=128)
    duration = models.DurationField(default=datetime.timedelta)
    result = models.CharField(
        max_length=1,
        choices=(('f', 'failure'), ('s', 'skipped'), ('p', 'passed'), ('e', 'error')),
    )

我试图在单个查询中获取给定run_result的每种结果的计数,以及具有该结果的测试用例的持续时间之和。

这给了我每种结果类型的计数,但是我不知道如何获得包括的持续时间之和。

qs = TestCaseResult.objects.filter(run_result=run_result).values('result').annotate(result_count=Count('result'))

我基本上希望将此作为结果SQL:

SELECT 
    "api2_testcaseresult"."result",
    SUM("api2_testcaseresult"."duration") AS "duration",
    COUNT("api2_testcaseresult"."result") AS "result_count"
FROM "api2_testcaseresult"
WHERE "api2_testcaseresult"."run_result_id" = 3
GROUP BY "api2_testcaseresult"."result";

请注意,“持续时间”如何不属于“ group by”子句的一部分。

1 个答案:

答案 0 :(得分:0)

您只需添加第二个>>> :set -XNoNegativeLiterals >>> -1 `mod` 2 -1 >>> :set -XNegativeLiterals >>> -1 `mod` 2 1 >>> - 1 `mod` 2 -1

annotate()

这应该为您提供所需的SQL查询。