按该字段分组后,组内行数大于 1 的就是重复行。大于 1 要写入 having;但仅用 group+having 只能得到汇总值,不是明细数据,要得到明细还要用子查询重复遍历:
select *
from A
where g in
(select g
from A
group by g
having count(*)>1)
SQL 没有显式的集合数据类型,不能保持住分组后的子集,进而无法针对子集进行后续的多步骤运算,不得不用冗长的子查询。
这类集合运算如果用集算器 SPL 就方便地多,只要一句:
=connect(”mysqlDB”).query(“select * from A”).group(g).select(~.len()>1).conj()
有了显式集合后,就可以对分组子集做更复杂的后续计算,包括枚举分组、重叠分组等,参考分组?原来你是玩儿真的!
当数据不在数据库里时,SPL 执行复杂计算仍然方便:
=file(“d:/t.csv”).import(;,",").group...
SPL能很方便地嵌入到JAVA应用,可参考《Java 如何调用 SPL 脚本》。
具体使用方法可参考 《如何使用集算器》。