一句话实现MySQL库中的重叠分组「建议收藏」

一句话实现MySQL库中的重叠分组「建议收藏」枚举多个条件进行分组时,可能发生重叠,重叠部分仅计入某个组,还是计入所有符合条件的组,这在写 SQL 时,写法大不相同。 只计入第一个符合条件的组时,可以通过 case when 转换成常规分组,例…

一句话实现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 还能实现更多非常规分组,可参考c.raqsoft.com.cn/article/1559481018562

当数据不在数据库里时,SPL 执行复杂计算仍然方便:
=file(“d:/t.csv”).import(;,“,”).enum…

SPL能很方便地嵌入到JAVA应用,可参考《Java 如何调用 SPL 脚本》

具体使用方法可参考 《如何使用集算器》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7746.html

(0)
上一篇 2023-03-14
下一篇 2023-03-15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注