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

如何限制SQL查询中IN子句每个元素对应的返回行数

实现方案

通用窗口函数方案(支持MySQL8.0+、PostgreSQL、SQL Server、Oracle等所有支持窗口函数的数据库)

用ROW_NUMBER()窗口函数给每个field2值对应的行单独编号,筛选编号≤25的即可实现需求:

WITH ranked_data AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY field2 ORDER BY 替换为你需要的排序字段) AS row_num
    FROM table1
    WHERE field1 = 4 
      AND field2 IN (2,3,4,5)
)
SELECT * 
FROM ranked_data 
WHERE row_num <= 25;

注意:ORDER BY后请替换为实际业务需要的排序规则,比如按主键、创建时间排序,否则返回的25行是随机结果。如果确实不需要固定排序,只要随机取25行,可以写ORDER BY RAND()(MySQL/PostgreSQL)或者ORDER BY NEWID()(SQL Server)。

MySQL 5.x 兼容方案(不支持窗口函数的老版本)

可以用自定义变量模拟行号实现相同效果:

SELECT * 
FROM (
    SELECT 
        *,
        @row_num := IF(@current_field2 = field2, @row_num + 1, 1) AS row_num,
        @current_field2 := field2
    FROM table1
    CROSS JOIN (SELECT @row_num := 0, @current_field2 := NULL) AS vars
    WHERE field1 = 4 
      AND field2 IN (2,3,4,5)
    ORDER BY field2, 替换为你需要的排序字段
) AS ranked_data
WHERE row_num <= 25;

补充说明

如果某个field2值对应的总数据量不足25行,上述语句会返回该值的全部可用数据,最终总条数会小于100,如果需要强制补到100行,可以额外加空值填充逻辑。如果需要处理排序字段值重复的取数场景,可以把ROW_NUMBER()替换为RANK()或者DENSE_RANK()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:36:00