(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,但仍然卡住了。
请帮助我。您的帮助将帮助我为博士学位设计我的第二个实验。
编辑:感谢最有同情心的人对此表示反对。您应该尝试自己攻读博士学位,以感受一下。
由于研究工作的性质,恐怕我无法提供样本数据。
所需的输出:
答案 0 :(得分:0)
在MySQL 8.0及更高版本中,我们可以使用Window Functions。我们在Partition
和schemename
的{{3}}字符串表达式上使用type
。
尝试( concatenated ):
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