问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MYSQl 根据类型排序各取3个,随机取,sql怎么写?

发布网友 发布时间:2022-04-08 19:19

我来回答

3个回答

热心网友 时间:2022-04-08 20:48

下面这个不知是否可行:

create table books(`id` int, `name` varchar(16),`type` varchar(16));
insert into books(`id`,`name`,type)
select 1 as `id`, 'book11' as `name`, 'type1' as `type`
union all
select 2, 'book12', 'type1'
union all
select 3, 'book13', 'type1'
union all
select 4, 'book14', 'type1'
union all
select 5, 'book15', 'type1'
union all
select 6, 'book21', 'type2'
union all
select 7, 'book22', 'type2'
union all
select 8, 'book23', 'type2'
union all
select 9, 'book24', 'type2'
union all
select 10, 'book25', 'type2'
union all
select 11, 'book26', 'type2'
union all
select 12, 'book31', 'type3'
union all
select 13, 'book32', 'type3'
union all
select 14, 'book33', 'type3'

select t.`id`, t.`name`, t.type, t.rank
  from (
         select b.`id`, b.name, b.type,
                if(@type = b.type, @rank := @rank + 1, @rank := 1) as rank,@type:=b.type
           from (select id, name, type from books order by type asc, rand() desc) as b,
           (select @type := null, @rank := 0) as a
       ) as t
where t.rank<=3;

追问你这种似乎是可以 但是我类型不止3个 rank 该怎么改? 似乎改了不对了。

追答数据是用于测试的,我只维护了3种类型,3种以上也是可以的。
这个rank是对相同类型的随机排序,rank<=3表示取每种类型的前3个(随机排序过的)。

热心网友 时间:2022-04-08 22:06

没啥很好的想法,但union all肯定行,来2次就行了

select * from (
SELECT * FROM (SELECT * FROM 表 ORDER BY RAND()) AS a
GROUP BY a.类型)t1
union all
select * from (
SELECT * FROM (SELECT * FROM 表 ORDER BY RAND()) AS a
GROUP BY a.类型)t2
union all
select * from (
SELECT * FROM (SELECT * FROM 表 ORDER BY RAND()) AS a
GROUP BY a.类型)t3追问谢谢,但是感觉楼上更好。

热心网友 时间:2022-04-08 23:41

大侠,你什么意思,没有明白,可否说明白点。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
mrna转录试剂盒 windows7应用程序损坏或丢失怎么办? 联想windows7怎么恢复不小心删除的应用 Win7电脑图标不见了如何恢复解决Win7电脑图标丢失问题的有效方法_百 ... 美女主播软件有哪些 什么软件看美女直播? 什么视频直播软件可以免费看女神直播? 钣金工业设计 钣金灰本段用途 关于刮胡子的相关问题 群星传统顺序 2019年山西消防工程师报名条件是什么需要社保吗? 二级建造师,二级造价工程师,二级消防工程师考哪个?山西哪个培训班好? 群星机械叛乱触发条件 公务员面试技巧:计划组织题目如何作答更有针对性? 山西消防工程师哪家通过率最高 我要报考山西二级消防工程师,我92年的,2015年毕业,可以报名么?怎么报?哪家教育机构比较好? 山西省忻州市二级消防工程师考试地点在哪 群星地联思潮是什么 山西的二级消防工程师挂靠给多钱? 2020年国结构化面试计划组织题目的小技巧? 我的微信群里面增加了群成员怎么人数总是保持不变 微信群里新加了好几个人为什么我还是显示之前的人数呢? 为什么微信群人员数与图标人数不符 微信群里头像显示与实际人数不一致是怎么回事 同一个微信群,为什么我两个手机显示的微信好友人数不一样? 我微信群里的朋友人数为什么和朋友的不一致 张闾瑛的介绍 马鞍山万力重工机械制造有限公司怎么样? 陶鹏飞的介绍 百家争鸣 与社会变革的关系 山西省消防工程师什么时候可以报名? 山西消防工程师可以报名了吗? 山西消防工程师开始报名了吗?什么时候考试? 群星联邦能一起赢吗 办理消防工程师有用吗 简述文艺复兴是14世纪中叶到17世纪初在欧洲发生的思想文化运动 文艺复兴的核心思想是什么 山西消防工程师考试地点,什么单位需要消防工程师证 百家争鸣各学派的主要思想 山西的消防考试什么时候开始/ 中国在百家争鸣得到了什么?百家争鸣是什么?为什么会这样? 橄榄油与亚麻籽油相比 哪个好 装了win10还能换回win7吗 人类的群星闪耀时的主题思想 为什么说戴爱莲打开了中国民族舞蹈的宝库 百家争鸣产生了什么影响百家争鸣产生什么影响 二维动画的文件格式通常有哪些 7.用photoshop存储动画时,存储的格式一般为什么 ,存储图像时,存储格 鼎和亚麻籽油与橄榄油哪个好?