如何对查询返回的所有项目进行分组。
如果我只提供一个例子,很难解释得很好。
我有一个名为UserActions的数据库,其中包含两列和以下数据:
ID | User | Action
1 | Mark | Jump
2 | Mark | Jump
3 | Mark | Jump
4 | Mark | Run
5 | Mark | Run
6 | John | Run
7 | John | Run
8 | Mark | Run
9 | Mark | Run
10 | Mark | Jump
11 | Mark | Jump
12 | John | Jump
13 | John | Jump
我想要的输出是:
Last ID | User | Action | Count
12 | John | Jump | 2
10 | Mark | Jump | 2
8 | Mark | Run | 2
6 | John | Run | 2
4 | Mark | Run | 2
1 | Mark | Jump | 3
基本上,它按用户和操作对所有项目进行分组,并在下一行是不同的操作或用户之前输出总计数。如果我使用“注释”进行常规分组,它将只对所有项目进行分组。
有没有办法使用Django Query或原始SQL?
谢谢, 标记
答案 0 :(得分:1)
SELECT Max(ID),Count([Action]) AS [Count], [User], [Action]
FROM @Table1
GROUP BY [User],[Action]
上述查询将产生所需的输出。
生成的输出是:
LastID User Action Count
13 John Jump 2
11 Mark Jump 5
7 John Run 2
9 Mark Run 4
希望有所帮助
答案 1 :(得分:0)
在django ORM中:
(Model.objects.values('user', 'action')
.order_by()
.annotate(max_id=models.Max('id'),
count=models.Count('action')))
请注意空.order_by()
。为了覆盖Meta
中声明的一个,需要它。 Django在ordering
字段中包含默认的GROUP BY
字段。
答案 2 :(得分:0)
SELECT x.*
FROM my_table x
LEFT
JOIN my_table y
ON y.user = x.user
AND y.action = x.action
AND y.id = x.id - 1
WHERE y.id IS NULL;
根据示例,这假设连续的增量ID,但如果情况并非如此,那么重写它是微不足道的。