sql >> Database >  >> RDS >> Mysql

Tel het voorkomen van het veld terwijl je groepeert op 2

Uw vraag heeft geen betrekking op uw voorbeeldgegevens; maar je lijkt aggregatie en rangschikking te willen. In MySQL 8.0 zou je het volgende doen:

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

Ik noemde de eerste kolom rn (voor rang ):ik vind id verwarrend hier, omdat je al een kolom met die naam in de tabel hebt staan.

In eerdere versies gebruikt één optie een sessievariabele in plaats van 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



  1. Aan de slag met Shareplex op Windows op AWS, deel 1

  2. SQL-query om record met ID niet in een andere tabel te vinden

  3. Hoe voeg ik binaire gegevens in een DB in met Laravel?

  4. 'Zelfondertekend certificaat'-fout tijdens het opvragen van de door Heroku gehoste Postgres-database vanuit de Node.js-toepassing