Biến do người dùng xác định trở nên hữu ích khi giải quyết vấn đề này. Điều này sẽ hoạt động:
select g, x, counter from (
select g, x,
@counter := if (g = @prev_g, @counter + 1, 1) counter,
@prev_g := g
from tb, (select @counter := 0, @prev_g := null) init
order by g, x
) s
Nếu bạn không thực sự bận tâm đến cột thứ tư thì bạn có thể loại bỏ lựa chọn bên ngoài một cách an toàn. Điều đó sẽ cải thiện hiệu suất rất nhiều.