一句話實現MySQL庫中的有序枚舉條件分組

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 腳本》

具體使用方法可參考 《如何使用集算器》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章