Mysql
 sql >> Base de données >  >> RDS >> Mysql

Compter l'occurrence du champ tout en étant groupé par 2

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