大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说一句话实现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