2016-05-29 224 views
0

这样的问题很少,但它们不是以一种简单的方式构建的,使答案可以用于更一般的情况。这些问题是为特定情况而建立的。Mysql group by by by by?

假设我们有一个表

id letter 
---------- 
1 a 
2 a 
3 b 
4 b 
5 a 

我们如何得到这样的结果?

1 a 2 
3 b 2 
5 a 1 
+0

的可能的复制[MySQL的顺序由前组由(http://stackoverflow.com/questions/14770671/mysql-order-by-前基团的通过) –

回答

2

基本上你需要知道什么时候你有一个新的“行”来分组。我排名不送改变字母

select min(id), letter, sum(my_count) 
from (
    select 
     id, letter, count(id) as my_count, 
     @rank := if (@letter = letter, @rank, @rank + 1) as rank, 
     @letter := letter 
    from test 
    cross join (select @rank := 0, @letter := '') t 
    group by id 
) t 
group by rank; 

FIDDLE