SQL 只有等值分組,枚舉分組一般要用 case when 過渡,但又保持不了次序,要保留次序就得 join,比如寫成這樣:
with T2(g,ord) as {
select 'firstGroup',1
union all select 'secondGroup',2
……
}
select T1.*
from T2 join
(select (case
when condition1 then 'firstGroup'
when condition2 then 'secondGroup'
…… end) g
, count(*) n
from A
group by g) T1
on T1.g=T2.g
order by T2.ord asc
而且,即使這樣,仍然會發生空組丟失的情況。
這種情況用 SPL 要方便得多,一句搞定:
=connect(”mysqlDB”).query(“select * from A”).enum([condition1,condition2,…]).new([”firstGroup”,”secondGroup”,…](#):g, ~.len():n)
SPL 對有序集合運算支持的很徹底,能顯式的表達運算過程中的數據集(包括分組子集),除了固定順序的枚舉分組,對重疊分組也容易實現,參考簡化 SQL 案例詳解:固定分組。
當數據不在數據庫裏時,SPL 執行復雜計算仍然方便:
=file(“d:/t.csv”).import(;,",").enum...
SPL能很方便地嵌入到JAVA應用,可參考《Java 如何調用 SPL 腳本》。
具體使用方法可參考 《如何使用集算器》。