Mysql按两列分组,并选择第三列的最大值

Mysql按两列分组,并选择第三列的最大值,mysql,sql,group-by,aggregate-functions,Mysql,Sql,Group By,Aggregate Functions,我有一个表,其中包含user\u id、item\u id和interaction\u type作为列。交互类型可以是0、1、2、3、4或5。但是,对于某些用户id和项目id对,我们可能有多种交互类型。例如,我们可能有: user_id item_id interaction_type 2 3 1 2 3 0 2 3 5 4 1

我有一个表,其中包含user\u id、item\u id和interaction\u type作为列。交互类型可以是0、1、2、3、4或5。但是,对于某些用户id和项目id对,我们可能有多种交互类型。例如,我们可能有:

user_id   item_id    interaction_type
2            3            1
2            3            0
2            3            5
4            1            0
5            4            4
5            4            2  
我想要的是,如果有倍数,只保留最大交互类型。所以我想要这个:

user_id   item_id    interaction_type
2            3            5
4            1            0
5            4            4
以下是我为此编写的查询:

select user_id, item_id, max(interaction_type) as max_type
from mytable
group by user_id, item_id;

但结果很奇怪。例如,在原始表中,我有100000行交互类型为5的行,但在结果表中,我只有2000行。这是怎么可能的,因为最大值将在每个包含5的比较中选择5,因此结果表中的5不应少于5

您的查询很好。您获得2000行的原因是,对于每一对唯一的值,
user\u id
item\u id
,您将获得一行

如果要查看每行中的交互类型,请使用:

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;
我突然想到,您希望所有行都具有最大交互类型。如果是,请计算最大值,然后查找与该值匹配的所有行:

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

此查询不需要分组依据。

您的查询没有问题。您获得2000行的原因是,对于每一对唯一的值,
user\u id
item\u id
,您将获得一行

如果要查看每行中的交互类型,请使用:

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;
我突然想到,您希望所有行都具有最大交互类型。如果是,请计算最大值,然后查找与该值匹配的所有行:

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

此查询不需要
分组依据

在所有列中添加更多具有不同值的样本数据行,并调整预期结果。是否确定每组
用户id
项目id
交互类型
都是唯一的?添加更多具有样本数据的行,在所有列中具有不同的值,并调整预期结果。是否确定每组
用户id
项目id
交互类型
都是唯一的?不,我不希望所有行都具有最大交互类型。我想知道,对于同一个用户和项目,我们有多个交互类型的最大值。因此,基本上我想要的是,当这些行的用户id和项目id相同时,消除重复的交互类型。选择max是其中一种方式。“您获得2000行的原因是,对于用户id和项目id的每一对唯一值,您将获得一行”。我不这么认为。因为我想我应该得到至少100000行交互类型为5的行,因为5将在每次比较中获胜,所以我不应该少5行。我可能有更少的0,1,2,3,4,但不是5。我错了吗?@HimanAB。行数由数据中
user\u id
item\u id
的组合数决定,而不是由
interaction\u type=5的行数决定。您只是有重复项。不,我不希望所有行都具有最大交互类型。我想知道,对于同一个用户和项目,我们有多个交互类型的最大值。因此,基本上我想要的是,当这些行的用户id和项目id相同时,消除重复的交互类型。选择max是其中一种方式。“您获得2000行的原因是,对于用户id和项目id的每一对唯一值,您将获得一行”。我不这么认为。因为我想我应该得到至少100000行交互类型为5的行,因为5将在每次比较中获胜,所以我不应该少5行。我可能有更少的0,1,2,3,4,但不是5。我错了吗?@HimanAB。行数由数据中
user\u id
item\u id
的组合数决定,而不是由
interaction\u type=5的行数决定。你只是有重复的。