为每个组随机化行,并选择n行和2个不同的标准

7kqas0il  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(327)
(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;

这将给出所有消息及其方案名称的列表。有没有一种方法可以为每个schemename分别获得3个“es”类型和2个“he”类型?
这不是一个家庭作业,而是一个研究问题的一部分,这个问题将反馈到用户研究的设计中。我试着用limit和join来查看这里的大多数帖子,但还是卡住了。
请帮帮我。你的帮助将帮助我为我的博士设计我的第二个实验。
编辑:多亏了最有同情心的人否决了这一点。你应该试着自己攻读博士学位来感受一下。
由于研究工作的性质,恐怕我不能提供样本数据。
期望输出:

xzabzqsa

xzabzqsa1#

在mysql 8.0及更高版本中,我们可以使用窗口函数。我们使用 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

相关问题