mysql - 为每个组随机化行并选择具有 2 个不同标准的 N 行
问题描述
(SELECT schemename, message FROM RandomMessagesSet where type = 'ES' ORDER BY RAND())
UNION ALL (SELECT schemename, message FROM RandomMessagesSet where type = 'HE' ORDER BY RAND()) ORDER BY schemename;
这给出了所有消息及其方案名称的列表。有没有办法为每个方案名获得 3 个“ES”类型和 2 个“HE”类型?
这不是家庭作业,而是研究问题的一部分,将用于设计用户研究。我通过查看这里的大多数帖子尝试使用 LIMIT 和 JOIN ,但仍然卡住了。
请帮我。你的帮助将帮助我为我的博士设计我的倒数第二个实验。
编辑:感谢最有同情心的人对此表示反对。您应该尝试自己攻读博士学位以感受一下。
由于研究工作的性质,恐怕我无法提供样本数据。
期望的输出:
解决方案
在 MySQL 8.0 及以上版本中,我们可以使用Window Functions。我们使用和的连接字符串Partition
的表达式。schemename
type
试试(DB Fiddle):
SELECT dt.schemename,
dt.type,
dt.message
FROM
(
SELECT
schemename,
type,
message,
ROW_NUMBER() OVER (PARTITION BY CONCAT(schemename, '-', type)
ORDER BY RAND()) AS row_num
FROM RandomMessagesSet
) AS dt
WHERE (dt.type = 'ES' AND dt.row_num <= 3) OR
(dt.type = 'HE' AND dt.row_num <= 2)
ORDER BY dt.schemename
推荐阅读
- react-native - React Native 0.57 + CocoaPods - 仅在 CI 环境中无法定位链接库
- r - 如何在 Shiny 中使用 renderPlot() 将 R 绘图导出到多页 PDF?
- scala - scala中的Spark会话应用程序格式化
- amazon-web-services - aws fargate 中的非 root 用户
- python - Bin 的 Numpy 和 Pandas 重复值
- php - 如何在 FTP 上通过 Composer 使用 PHPMailer
- python - Pandas 数据框在 x 行后创建新列
- javascript - 如何在 chrome 扩展的调试器中获取选定的元素
- c - CGAL::Surface_mesh - 使用整数索引访问面/顶点?
- python - 使用 pywinauto 发送 ALT 代码