Mysql组由两列组成,并选择第三列的最大值

时间:2017-04-16 14:27:39

标签: mysql sql group-by aggregate-functions

我有一个以user_id,item_id和interaction_type为列的表。 interaction_type可以是0,1,2,3,4或5.但是,对于某些user_id和item_id对,我们可能有多个interaction_types。例如,我们可能有:

user_id   item_id    interaction_type
2            3            1
2            3            0
2            3            5
4            1            0
5            4            4
5            4            2  

我想要的是只有多倍才能保持最大的interaction_type。所以我想要这个:

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行,interaction_type = 5,但在结果表中我只有2000.这怎么可能,因为max将在包含5的每个比较之间选择5,因此我不应该少于5在结果表中。

1 个答案:

答案 0 :(得分:1)

您的查询没问题。获得2000行的原因是因为每一对唯一值<input #name name="name" [(ngModel)]="firstName" (change)="onNameChange(name.value)"> user_id得到一行。

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

item_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;