mysql - 按部分/比率返回 MySQL
问题描述
这不是一个容易解释的,所以我会尽力而为
我在数据库中有一个问题列表,每个问题都有一个主题
我想从数据库中返回 50 行...简单一点。
我想从数据库中返回 50 行,但是从每个主题中得到几个问题,我不想从每个主题中定义一个确切的数字,我只想让它抓住它可以提供的东西,只要它从每个主题中抓取一些
可以做到这一点的任何想法、线索或 MySQL 函数的名称
我的问题是我什至不知道用什么谷歌来得到我想要的东西,有没有我想要做的事情的名字。
解决方案
这个问题在不支持分析功能的早期版本的 MySQL 中是一个真正的痛苦。随着 MySQL 8+ 的出现和ROW_NUMBER
. 考虑下表和查询:
WITH yourTable AS (
SELECT 1 AS topic, 'Q1' AS question UNION ALL
SELECT 1, 'Q2' UNION ALL
SELECT 1, 'Q3' UNION ALL
SELECT 1, 'Q4' UNION ALL
SELECT 1, 'Q5' UNION ALL
SELECT 2, 'Q1' UNION ALL
SELECT 2, 'Q2' UNION ALL
SELECT 2, 'Q3' UNION ALL
SELECT 2, 'Q4' UNION ALL
SELECT 2, 'Q5'
)
SELECT topic, question
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY topic ORDER BY rand()) rn
FROM yourTable
) t
WHERE rn <= 2;
演示
上面的查询将从每个主题中返回最多 2 条随机记录。它使用ROW_NUMBER
, 但随机排序。只有一个问题的主题只会返回那个问题。
推荐阅读
- python - 如何启动本地 HTTP 服务器假装是某个远程服务器?
- c# - 去 AES 加密 CBC
- karate - 空手道 DSL:从响应中提取 XML 属性值
- html - Flex nowrap 容器不包裹孩子。当那些的宽度以百分比提到时
- github - 如果前一个失败但当前一个成功,有什么方法可以触发 Github 操作?
- flutter - 如何使用 Provider 实现注册/登录逻辑。颤振,飞镖,移动开发
- java - 当所有其他消息完成处理时,Spring集成处理消息
- json - 通过 Oauth 请求 Zoom API 的访问令牌 - 错误“缺少授权类型”
- node.js - MongoDb find().lean() 很慢
- linux - 'apt-get clean' 在带有 WSL2 的 Ubuntu 20.04 LST 中返回错误