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;
1条答案
按热度按时间yqhsw0fo1#
在不支持分析函数的早期版本mysql中,这个问题是一个非常棘手的问题。随着mysql 8+的出现和
ROW_NUMBER
,问题相当简单。考虑下表和查询:演示
上面的查询将从每个主题返回最多2条随机记录。它使用
ROW_NUMBER
,但随机排序。只有一个问题的主题只会返回一个问题。