mysql重叠的词_一句话实现MySQL库中的重叠分组

枚举多个条件进行分组时,可能发生重叠,重叠部分仅计入某个组,还是计入所有符合条件的组,这在写 SQL 时,写法大不相同。

只计入第一个符合条件的组时,可以通过 case when 转换成常规分组,例如:

select (case

when age<=18 then ‘Teenager’

when age>=16 and age<=30 then ‘Youth’

when age>=28 and age<=45 then ‘MiddleAge’ end) g

,count(*) n

from A

group by g

如果重叠部分要计入所有组时,就麻烦多了。SQL 只支持等值分组,无法实现外部定义分组,对位分组。一般也就只能针对每个条件遍历,然后再把结果集 union 到一起,条件多时, SQL 语句规模和性能都堪忧:

(select ‘Teenager’ g, count(*) n

from A

where age<=18)

union

…Youth…

union

…MiddleAge…

这种非常规分组如果用集算器 SPL,就容易得多。比如上面的问题把组条件和名称通过参数传进来 >w=[?<=18,?>=16&&?<=30,?>=28&&?<=45]

>wn=["Teenager","Youth","MiddleAge"]

只要一句话就能实现

不重叠 / 重叠(增加

@r选项)分组:

=connect(”mysqlDB”).query(“select * from A”).enum

@r(w, age).new(wn(#):g, ~.len():n)

这句 SPL 还保证了返回结果集的次序,并且没有匹配上的记录也不会被遗漏。

当数据不在数据库里时,SPL 执行复杂计算仍然方便:

=file(“d:/t.csv”).import(;,",").enum...

SPL能很方便地嵌入到JAVA应用,可参考

《Java 如何调用 SPL 脚本》。

具体使用方法可参考

《如何使用集算器》。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值