Ruby Gem Sequel如何筛选GROUP BY后COUNT值大于指定阈值的结果
Sequel 实现分组后按聚合计数过滤的方法
你可以直接在group_and_count返回的数据集后链式调用having方法实现需求,有三种常用写法:
写法1:直接引用计数字段别名(最简洁)
group_and_count默认会将聚合的计数字段别名设置为count,可以直接对别名做判断:
DB[:items].group_and_count(:name).having { count > 2 }.all
写法2:虚拟行块语法(官方推荐)
DB[:items].group_and_count(:name).having { count(name) > 2 }.all
该写法为Sequel原生支持的DSL风格,会自动处理标识符转义、数据库语法适配,天然避免SQL注入风险。
写法3:字符串占位符语法
DB[:items].group_and_count(:name).having('count(name) > ?', 2).all
适合自定义复杂条件的场景,注意必须使用?占位符传递参数,禁止直接拼接用户输入的数值,避免SQL注入。
以上三种写法生成的SQL和你给出的目标SQL完全一致,返回结果结构和原group_and_count返回结构相同,仅过滤了计数大于2的条目。
内容的提问来源于stack exchange,提问作者Ymox
相关产品推荐
相关产品推荐

