mysql重叠的部分不要_一句话实现MySQL库中的重叠分组

本文探讨了在SQL中处理分组时遇到的重叠问题,指出SQL在处理复杂分组条件时的局限性,尤其是面对不等值或外部定义的分组。同时,介绍了SPL(集算器)作为一种更灵活的解决方案,能够轻松应对这种场景,通过一句代码即可实现不重叠或重叠分组,并保证结果集的顺序和完整性。对于大量条件的分组,SPL比SQL更加高效且简洁。此外,SPL还能方便地与JAVA应用集成,为复杂数据处理提供便利。
摘要由CSDN通过智能技术生成

枚举多个条件进行分组时,可能发生重叠,重叠部分仅计入某个组,还是计入所有符合条件的组,这在写 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、付费专栏及课程。

余额充值