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

Groupe Mysql par deux colonnes et choisissez la valeur maximale de la troisième colonne

Votre requête est bonne. La raison pour laquelle vous obtenez 2000 lignes est que vous obtenez une ligne pour chaque paire unique de valeurs user_id , item_id .

Si vous souhaitez voir les types d'interaction entrant dans chaque ligne, utilisez :

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;

Il me semble que vous voulez toutes les lignes avec le type d'interaction maximale. Si tel est le cas, calculez le maximum, puis recherchez toutes les lignes correspondant à cette valeur :

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

Pas de group by est nécessaire pour cette requête.