2016-05-29 141 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