我想知道将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
希望你明白我想找... ...
最佳塔西洛
答案 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
如果我对问题有错误的理解,请更正