Potrzebowałem ostatnio zapytania, które zgrupuje wyniki po danej kolumnie i zwróci je wraz z ilością wystąpień – czyli banał. Dopiero dodanie warunku, aby zapytanie zwracało wyniki tylko dla 5 rekordów o największej zliczonej wartości wymagało chwili pisania. Listing poniżej.
SELECT ip, costam_id, ile FROM ( SELECT *, @rn := CASE WHEN @prev_ip = ip THEN @rn + 1 ELSE 1 END AS rn, @prev_ip := ip FROM ( SELECT ip, costam_id, count(1) as ile FROM play GROUP BY ip, costam_id ) AS T1, (SELECT @prev_ip := '', @rn := 0) AS vars ORDER BY ip, ile DESC ) AS T2 WHERE rn <= 5 ORDER BY ip, ile DESC