0

我有这样的表:

user_id | points
--------+--------
1         10
1         500
2         2
2         6
3         5
3         50

现在我想计算有多少用户的 SUM(points) 介于 1 和 80 之间、81 和 140 之间等。我怎样才能得到它?在 SQL 中,它看起来只能通过嵌入式 SQL 查询来完成 - 内部用于使用 HAVING 子句进行分组,外部用于计算结果集中的行数。

4

1 回答 1

0

知道了。

#Declaring grouped data ranges (`lte` is `<=`, `gte` is `>=`, no postfix is `=`)
points_grouping_data = {
    'A22': { 'cc__lte': 50 },
    'B22': { 'cc__gte': 51, 'cc__lte': 150 },
    'C22': { 'cc__gte': 151, 'cc__lte': 199 },
    'D22': { 'cc': 200 },
    'E22': { 'cc__gte': 201, 'cc__lte': 300 },
    'F22': { 'cc__gte': 300, 'cc__lte': 400 },
    'G22': { 'cc__gte': 400, 'cc__lte': 499 },
    'H22': { 'cc': 500 },
    'I22': { 'cc__gt': 500 },
}

for cell, params in points_grouping_data.items():
    value = PointsLog.objects.values('user').annotate(
        cc=Sum('points')
    ).filter(**params).count()
于 2014-09-09T08:31:43.027 回答