mysql取前20%里的随机10条数据的sql要怎么写

qq_20839977 2017-04-21 09:12:54
CREATE TABLE `t_team_money` (
`team_id` int(11) unsigned NOT NULL COMMENT '球队id',
`cap` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '能力',

PRIMARY KEY (`team_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='队伍';

要取能力前20%的用户的随机10个
可以不用一条sql,但是不能一次性存20%的用户数据出来。
这个要怎么写啊。
我能想到的就是先算总数的20%
然后用limlt和order by查出前20%的用户数据,但是我又不想把这些数据存到内存里,怕数据太多,
所以后面我就不知道怎么随机了
...全文
792 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcy_n 2017-04-28
  • 打赏
  • 举报
回复
漏了个别名,现更新如下 2、select * from (select * from t_team_money order by cap desc limit round(n*0.2))tmp order by rand() limit 10;
fcy_n 2017-04-28
  • 打赏
  • 举报
回复
1、先count总数,假设值为n; 2、select * from (select * from t_team_money order by cap desc limit round(n*0.2)) order by rand() limit 10;
zjcxc 2017-04-27
  • 打赏
  • 举报
回复
前 20% 得先排序存(只存 id,并根据 id 顺序生成一个序号) 随机取10,就是生成 10 个随机数,值从 1 到 20% 总数,然后这个随机数对应的序号的 id 取出来,用这些 id 取实际数据
ckc 2017-04-27
  • 打赏
  • 举报
回复
你这是球队管理,数据量不可能太大的吧, 全地球的球队都在这里数据量也不算很大 如果不想全部取出来可以用临时表,也可以用子查询

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧