按比例返回mysql

col17t5w  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(279)

这不是一个容易解释的问题,所以我会尽我所能
我在数据库里有一个问题列表,每个问题都有一个主题
我想从数据库中返回50行。。。轻松一点。
我想从数据库中返回50行,但是从每个主题中得到一些问题,我不想从每个主题中定义一个确切的数字,我只希望它能够从每个主题中获取一些可用的数据,只要它从每个主题中获取一些
有什么想法,线索,或者mysql函数的名字可以做到这一点吗
我的问题是我甚至不知道用谷歌搜索什么才能得到我想要的,我想做的事情有没有一个名字。

yqhsw0fo

yqhsw0fo1#

在不支持分析函数的早期版本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 ,但随机排序。只有一个问题的主题只会返回一个问题。

相关问题