首页 新闻 会员 周边 捐助

mysql group by分组后取得是组内多条记录而仅仅是第一条???

0
[已解决问题] 解决于 2019-11-02 17:28

同标题

item 商品表
item_type_id 商品的分类id

现在问题是:想用一条sql查询出item表中,每个商品分类的商品记录信息(每个分类最多4条记录)

下面这个是自己的思路,没有得到想要的效果
select * from item as t GROUP BY t.item_type_id
having (select count(t1.id) from item as t1 where t1.id = t.id)<=4

Mr_伍先生的主页 Mr_伍先生 | 初学一级 | 园豆:6
提问于:2019-10-10 11:35
< >
分享
最佳答案
0

根据你的描述我大概揣摩了一下你的意思,这是SQL Server的中的写法

select * from (select row=row_number() over(partition by item_type_id ORDER BY item_type_id ),* from item) as t where row<=4

奖励园豆:5
华临天下 | 小虾三级 |园豆:1501 | 2019-10-10 15:14

我研究一下,上面的SQL Server怎样转换为mysql吧,SQL Server不是太了解,还是感谢...

Mr_伍先生 | 园豆:6 (初学一级) | 2019-10-10 15:19

看了一下这个SQL的含义,你刷选出来的应该是每个商品分类中商品的数量小于或等于4的商品分类的商品列表

我的需求是:
刷选出符合要求的商品分类的商品列表,每个商品分类中最多4个商品

Mr_伍先生 | 园豆:6 (初学一级) | 2019-10-10 15:31

不知道,我上述对SQL Server伪代码的理解是否正确?

Mr_伍先生 | 园豆:6 (初学一级) | 2019-10-10 15:32

@Mr_伍先生: 这跟数量有什么关系,这row列是你分组(partition by 分组名)之后,根据你给定的列名排序(order by 排序名称),然后会给所有的数据分组之后的排名,然后取排名在前4的数据

华临天下 | 园豆:1501 (小虾三级) | 2019-10-10 15:34

@Mr_伍先生: 

CREATE table #tnp(
Sheng nvarchar(10),
Shi nvarchar(10)
)
insert into #tnp
select N'河北',N'石家庄' union all
select N'河北',N'唐山' union all
select N'河北',N'秦皇岛' union all
select N'山西',N'太原' union all
select N'山西',N'大同'

select * from (select *,xh=row_number() over(partition by Sheng order by Shi desc ) from #tnp) as #tt where xh in(1,2)

这个例子你看看有没有什么帮助

华临天下 | 园豆:1501 (小虾三级) | 2019-10-10 15:35
其他回答(2)
0

描述清楚一点吧

实力快递员 | 园豆:72 (初学一级) | 2019-10-10 12:55
0

https://www.cnblogs.com/HugJun/p/11731385.html 自己之前遇到的问题,可以看看,吧里面的排名变成数量也就ok

小君~ | 园豆:202 (菜鸟二级) | 2019-11-04 11:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册