mysql-每个年龄段的SQL返回100个随机行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-每个年龄段的SQL返回100个随机行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2454字,纯文字阅读大概需要4分钟。
内容图文
![mysql-每个年龄段的SQL返回100个随机行](/upload/InfoBanner/zyjiaocheng/887/dafd103355124e3eb0a8d2156ede6b60.jpg)
对于每个i.Age(0-100),我想使用所选数据为每个年龄返回100个随机行.我不确定我是否应该使用while循环来完成此操作,或者是否可能以某种方式限制一个组?我看了几个不同的例子,但我仍然很困惑.
SELECT, i.name, i.Gender, i.Age, i.MP, b.score
FROM i
INNER JOIN b on b.name=i.name
WHERE i.MP='F'
AND i.gender='F'
AND b.score<=-1
AND i.age = 0
ORDER BY RAND()
LIMIT 100
目前,上面的查询有效,但它只返回100个年龄为0的随机行.我看了几个例子,但无法掌握应使用group by还是while循环.表中有超过10,000,000行.
解决方法:
您可以在下面的查询中使用用户定义的变量,查询将为您提供每个不同年龄的一条记录,内部查询只是检查相同年龄并为其赋予排名,例如4个相同年龄(年龄= 1)的排名将分别为1,2,3 ,4并且当age = 2时,排名号将从1开始,外部查询的过滤器正在过滤行以显示排名为1的位置,因此对于每个不同的年龄,您将获得一行并且它们是随机排序的
SELECT c.name, c.Gender, c.Age, c.MP, c.score
FROM (
SELECT i.name, i.Gender, i.Age, i.MP, b.score,
@r:= CASE WHEN @g = i.Age THEN @r + 1 ELSE 1 END rownum,
@g:=i.Age
FROM i
INNER JOIN b ON b.name=i.name
CROSS JOIN(SELECT @g:=NULL ,@r:=0) a
WHERE i.MP='F' AND i.gender='F' AND b.score<=-1
ORDER BY i.Age, RAND()
) c
WHERE c.rownum = 1
ORDER BY c.Age
LIMIT 100
假设您加入的查询为您提供的结果为
样本数据集
name gender Age Mp score
============================
test1 male 1 1 10
test2 male 1 1 10
test3 male 1 1 10
test4 male 2 1 10
test5 male 2 1 10
test6 male 3 1 10
test7 male 4 1 10
test8 male 4 1 10
.....
现在在我的答案中使用内部查询将为您提供带有rank列的结果集,如下所示
内部查询结果集
name gender Age Mp score rank
==================================
test2 male 1 1 10 1
test1 male 1 1 10 2
test3 male 1 1 10 3
test4 male 2 1 10 1
test5 male 2 1 10 2
test6 male 3 1 10 1
test7 male 4 1 10 1
test8 male 4 1 10 2
在上面的结果集中,您可以看到age = 1有3行,并且它们的等级是不同的1,2,3相同的示例age = 2等级是1,2同样,age = 4,现在在我的答案中,外部查询将过滤掉等级= 1的结果,因此最终结果集将为每个不同的内容包含一行,请参见下面的结果集
最终输出
name gender Age Mp score rank
==================================
test2 male 1 1 10 1
test4 male 2 1 10 1
test6 male 3 1 10 1
test7 male 4 1 10 1
随机排序部分是在内部查询中完成的,因为您可以看到按部分排序.ORDER BY i.Age,RAND()它将首先以升序的方式对年龄进行排序,然后对于相同的年龄值,它将进一步对结果进行随机排序.这说得通
内容总结
以上是互联网集市为您收集整理的mysql-每个年龄段的SQL返回100个随机行全部内容,希望文章能够帮你解决mysql-每个年龄段的SQL返回100个随机行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。