2017-10-05 83 views
0

我想要获得分组计数的总和。在SQL查询中分组计数

SELECT ig_idx,ig_team1,ig_team2benefit,ig_game_type 
FROM (select ig_idx,ig_team1,ig_team2benefit,ig_game_type, 
RANK() OVER(partition by ig_root,ig_game_type order by ig_idx asc) AS rank 
FROM info_game) AS t1 
WHERE rank < 2 

================================== 
idx name  odds type 
---------------------------------- 
1 Kjelsaas 1.4  dnb 
2 Kjelsaas 1.75 1x2 
3 Kjelsaas 1.75 ou 
4 Kjelsaas 1.8  ah 
5 Grorud  3  dnb 
6 Grorud  3.8  1x2 
7 Grorud  1.36 ou 
8 Grorud  2.075 ah 
9 Brumunddal 2.25 1x2 
10 Brumunddal 1.57 ou 
11 Brumunddal 2.2  ah 
================================== 

我想要一个结果。

================================== 
idx name  odds type count 
---------------------------------- 
1 Kjelsaas 1.4  dnb 4 
2 Kjelsaas 1.75 1x2 4 
3 Kjelsaas 1.75 ou  4 
4 Kjelsaas 1.8  ah  4 
5 Grorud  3  dnb 2 
6 Grorud  3.8  1x2 2 
9 Brumunddal 2.25 1x2 3 
10 Brumunddal 1.57 ou  3 
11 Brumunddal 2.2  ah  3 
================================== 
+0

第一个查询返回您的示例数据?如果是的话,2 Grorud行发生了什么? Grorud应该是4吗? – SQLChao

回答

3

我假设你的查询返回第一个表结果?你可以这样做:

with cte_example 
as 
(SELECT ig_idx,ig_team1,ig_team2benefit,ig_game_type 
FROM (select ig_idx,ig_team1,ig_team2benefit,ig_game_type, 
RANK() OVER(partition by ig_root,ig_game_type order by ig_idx asc) AS rank 
FROM info_game) AS t1 
WHERE rank < 2) 

select * 
     ,count(name) over(partition by name) count 
from cte_example 

或者你可以在你的派生表中放入count...over函数?有很多方法可以做到这一点。或者是你的查询尝试和第一个表是数据样本,使它看起来像后者?