You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于question_type_id字段按指定数量查询SQL行的实现方案

按题型ID查询指定数量题目

一、手动指定各题型查询条数

如果需要直接在SQL中定义不同question_type_id对应的查询行数(比如question_type_id=2取2条,question_type_id=3取5条),可以借助窗口函数实现:

适用于MySQL 8.0+/PostgreSQL/SQL Server

SELECT q.question_id, q.question_content, q.question_type_id
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER(PARTITION BY question_type_id ORDER BY question_id) AS row_num,
        -- 自定义各题型的取数规则
        CASE question_type_id
            WHEN 2 THEN 2
            WHEN 3 THEN 5
            -- 可添加更多题型规则
            ELSE 1 -- 默认取1条
        END AS limit_num
    FROM Questions
) q
WHERE q.row_num <= q.limit_num;

二、从QuestionTypes表读取取数规则

如果QuestionTypes表中维护了每个题型对应的查询条数(假设表中有query_count字段存储该值),可以通过关联表实现动态取数:

适用于MySQL 8.0+/PostgreSQL/SQL Server

SELECT q.question_id, q.question_content, q.question_type_id
FROM (
    SELECT 
        q.*,
        ROW_NUMBER() OVER(PARTITION BY q.question_type_id ORDER BY q.question_id) AS row_num
    FROM Questions q
    JOIN QuestionTypes qt ON q.question_type_id = qt.question_type_id
) q
JOIN QuestionTypes qt ON q.question_type_id = qt.question_type_id
WHERE q.row_num <= qt.query_count;

三、兼容MySQL 5.x版本(无窗口函数)

如果使用不支持窗口函数的MySQL旧版本,可通过变量实现:

SELECT 
    question_id, question_content, question_type_id
FROM (
    SELECT 
        *,
        @row_num := IF(@current_type = question_type_id, @row_num + 1, 1) AS row_num,
        @current_type := question_type_id
    FROM Questions, (SELECT @row_num := 0, @current_type := NULL) vars
    ORDER BY question_type_id, question_id
) q
JOIN (
    -- 手动定义题型与取数的对应关系,也可替换为关联QuestionTypes表
    SELECT 2 AS question_type_id, 2 AS limit_num UNION ALL
    SELECT 3 AS question_type_id, 5 AS limit_num
) t ON q.question_type_id = t.question_type_id
WHERE q.row_num <= t.limit_num;

关键说明

  • PARTITION BY question_type_id:按题型ID分组,每组内独立编号
  • ORDER BY question_id:指定组内排序规则,保证取数结果的一致性(可替换为创建时间等其他字段)

内容的提问来源于stack exchange,提问作者amralsaidy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:07:38