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

SQL按指定数量筛选不同action_code_is值的实现求助

按指定数量筛选不同action_code_is的记录

可以通过窗口函数ROW_NUMBER()实现按分组取指定条数的需求,具体SQL代码如下:

SELECT *
FROM (
    SELECT 
        *,
        -- 按action_code_is分组,给每组内记录分配序号
        ROW_NUMBER() OVER (PARTITION BY action_code_is ORDER BY (SELECT NULL)) AS rn
    FROM table1
    WHERE action_code_is IN ('pink', 'yellow', 'blue', 'green') 
      AND `group` = 'colors' -- group是SQL关键字,用反引号包裹避免报错
) AS sub_query
-- 根据不同action_code_is筛选对应数量的记录
WHERE 
    (action_code_is = 'pink' AND rn <= 4)
    OR (action_code_is = 'yellow' AND rn <= 5)
    OR (action_code_is = 'blue' AND rn <= 6)
    OR (action_code_is = 'green' AND rn <= 3);

关键说明

  • ROW_NUMBER():给每个action_code_is分组内的记录生成唯一序号,序号从1开始递增。
  • ORDER BY (SELECT NULL):如果不需要特定的筛选顺序(比如随机取),用这个写法;如果需要按某个字段排序(比如按创建时间取最新的N条),把这里替换成对应的字段,例如ORDER BY create_time DESC。
  • 关键字处理:group是SQL保留关键字,在不同数据库里的转义方式不同:
    • MySQL/MariaDB用反引号`包裹
    • SQL Server用方括号[]包裹
    • PostgreSQL用双引号""包裹

内容的提问来源于stack exchange,提问作者Gintarė Sunn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:20:36