Votre requête ne concerne pas vos exemples de données ; Cependant, vous semblez vouloir l'agrégation et le classement. Dans MySQL 8.0, vous feriez :
select
row_number() over(order by count(*) desc) rn,
order_id,
count(*) items_in_order
from data
group by order_id
order by rn
J'ai nommé la première colonne rn
(pour le rang ):Je trouve id
déroutant ici, puisque vous avez déjà une colonne avec ce nom dans le tableau.
Dans les versions antérieures, une option utilise une variable de session au lieu de row_number()
:
select @rn := @rn + 1 rn, order_id, items_in_order
from (
select order_id, count(*) items_in_order
from data
group by order_id
order by items_in_order desc
) t
cross join (select @rn := 0) r
order by items_in_order desc