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用双引号
""包裹
- MySQL/MariaDB用反引号
内容的提问来源于stack exchange,提问作者Gintarė Sunn
相关产品推荐
相关产品推荐

