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

MySQL gruppiert nach zwei Spalten und wählt den Maximalwert der dritten Spalte aus

Ihre Anfrage ist in Ordnung. Der Grund, warum Sie 2000 Zeilen erhalten, ist, dass Sie eine Zeile für jedes eindeutige Wertepaar user_id erhalten , item_id .

Wenn Sie die Interaktionstypen in jeder Zeile sehen möchten, verwenden Sie:

select user_id, item_id, max(interaction_type) as max_type,
       group_concat(distinct interaction_type) as interaction_types,
       count(*) as cnt
from mytable
group by user_id, item_id;

Mir fällt auf, dass Sie alle Zeilen mit dem maximalen Interaktionstyp haben möchten. Berechnen Sie in diesem Fall das Maximum und finden Sie dann alle Zeilen, die diesem Wert entsprechen:

select t.*
from mytable t cross join
     (select max(interaction_type) as maxit from mytable) x
     on x.maxit = t.interaction_type;

Kein group by wird für diese Abfrage benötigt.