mysql group by但只有第二行相同的group

时间:2018-01-31 18:00:26

标签: mysql

我想知道将mysql结果分组的最聪明方法是什么......我有以下表结构:

- id
- userId
- status (values from 1-100)

让我们说以下内容:

1 | 1 | 10
2 | 1 | 10
3 | 1 | 15
4 | 2 | 15
5 | 3 | 10

现在我想按用户对所有结果进行分组,但仅针对每种状态。所以我要寻找的结果应该是:

1 | 1 | 10
3 | 1 | 15
4 | 2 | 15
5 | 3 | 10

希望你明白我想找... ...

最佳

塔西洛

2 个答案:

答案 0 :(得分:0)

如果您需要id,则需要GROUPing查询;这将产生您显示的结果:

SELECT MIN(id), userId, status
FROM your_table
GROUP BY userId, status
;

如果你不需要id,那么GROUPing不是最好的工具,而是使用DISTINCT;像这样:

SELECT DISTINCT userId, status
FROM your_table
;

答案 1 :(得分:0)

这个问题的主题是“仅当下一行是相同的”时,在这种情况下我会做这样的事情:

create table USER_(id integer, UserId integer, status integer);

insert into USER_ values(1,1,10);
insert into USER_ values(2,1,10);
insert into USER_ values(3,1,115);
insert into USER_ values(4,2,115);
insert into USER_ values(5,3,10);
insert into USER_ values(6,1,10);

select min(a.id)as id, a.userId, a.status ,count(*) from USER_ a join USER_ b 
on a.userid = b.userid and a.id = b.id-1 group by a.userId,a.status;

 id | userid | status | count 
-----+--------+--------+-------    
  1 |      1 |     10 |     2

如果我在这里查看问题的解释,我会做这样的事情:

select min(a.id) as id, a.userId, a.status  from USER_ a 
group by a.userId,a.status order by a.userid,status;

 id | userid | status 
----+--------+--------
  1 |      1 |    10
  3 |      1 |    15
  4 |      2 |    15
  5 |      3 |    10

如果我对问题有错误的理解,请更正