Mysql分组依据(结果的自定义编号)
我有一张桌子Mysql分组依据(结果的自定义编号),mysql,group-by,Mysql,Group By,我有一张桌子 Id Name Id_collection Price 1 good1 2 10 2 good2 1 101 3 good3 3 102 4 good4 2 10 5 good5 2 10 我需要按id_集合进行分组,但我需要显示2行(以便能够通过变量或…更改此值,例如:更改为3或4) 或 所以结果一定是 Id Name
Id Name Id_collection Price
1 good1 2 10
2 good2 1 101
3 good3 3 102
4 good4 2 10
5 good5 2 10
我需要按id_集合进行分组,但我需要显示2行(以便能够通过变量或…更改此值,例如:更改为3或4)
或
所以结果一定是
Id Name Id_collection Price
1 good1 2 10
4 good4 2 10
2 good2 1 101
3 good3 3 102
我在考虑程序或循环,但我以前没有,请帮助 要按相邻值分组。在MySQL中。您可以使用变量来分配组。或者,您可以使用此方法来分配组:计算具有
id\u集合
的行数,这些行与具有较小id的每一行不同
您没有指定如何计算其他列,但这里有一个猜测:
select min(id) as id, min(name) as name, id_collection, avg(price) as price
from (select t.*,
(select count(*)
from t t2
where t2.id_collection <> t.id_collection and
t2.id < t.id
) as grp
from t
) t
group by id_collection, grp;
我编辑了一点@Gordon_Linoff发布的答案,现在它可以工作了,你只需更改rn@Gordon_Linoff第一个查询工作正常,第二个不正常(显示所有行),对于第一个查询,是否可以显示3个或更多数字而不仅仅是2?@Asylzazazaev。有几个输入错误。@Gordon_Linoff您的第一个示例非常好,但我不知道如何显示3或4个分组“id_collection”计数,现在它显示2个计数,但很快就会更改,第二个示例显示所有数据列表,字段“rn”始终保持为1,请帮助!!!
Id Name Id_collection Price
1 good1 2 10
4 good4 2 10
2 good2 1 101
3 good3 3 102
select min(id) as id, min(name) as name, id_collection, avg(price) as price
from (select t.*,
(select count(*)
from t t2
where t2.id_collection <> t.id_collection and
t2.id < t.id
) as grp
from t
) t
group by id_collection, grp;
select t.*
from (select t.*,
(@rn := if(@id = id_collection, @rn,
if(@id := id_collection, @rn + 1, @rn + 1)
)
) as rn
from t cross join
(select @id = -1, @rn := 0) params
order by id
) t
where rn = 1;
select t.*
from (select t.*,
(@rn := if(@id = id_collection, @rn + 1,
if(@id := id_collection, 1, 0)
)
) as rn
from t cross join
(select @id := -1, @rn := 0) params
order by id_collection
) t
where rn <= 3;