Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zählen Sie das Auftreten des Felds, während Sie Gruppieren nach 2

Ihre Anfrage bezieht sich nicht auf Ihre Beispieldaten; Sie scheinen jedoch Aggregation und Ranking zu wollen. In MySQL 8.0 würden Sie Folgendes tun:

select
    row_number() over(order by count(*) desc) rn,
    order_id,
    count(*) items_in_order
from data
group by order_id
order by rn

Ich habe die erste Spalte rn genannt (für Rang ):Ich finde id verwirrend, da Sie bereits eine Spalte mit diesem Namen in der Tabelle haben.

In früheren Versionen verwendet eine Option eine Sitzungsvariable anstelle von 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