2016-05-29 8 views
0

Es gibt wenige Fragen wie diese, aber sie sind nicht auf eine einfache Art konstruiert, die die Antwort für allgemeinere Fälle zugänglich machen. Diese Frage wurde für spezifische Fälle erstellt.Mysql Gruppe von nach Bestellung von?

Angenommen, wir haben eine Tabelle

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

wie bekommen wir dieses Ergebnis?

1 a 2 
3 b 2 
5 a 1 
+0

Mögliche Duplikat [MySQL Ordnung durch, bevor Gruppe] (http://stackoverflow.com/questions/14770671/mysql-order-by- vor der Gruppe vorbei) –

Antwort

2

Im Grunde müssen Sie wissen, wann Sie eine neue "Zeile" haben, von der aus gruppiert werden soll. Ich Ranking sie weg von den veränderten Buchstaben

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