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

xiaohuihui發表於2020-06-28

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 對有序集合運算支援的很徹底,能顯式的表達運算過程中的資料集(包括分組子集),除了固定順序的列舉分組,對重疊分組也容易實現,參考 。

當資料不在資料庫裡時,SPL 執行復雜計算仍然方便:
=file(“d:/t.csv”).import(;,",").enum...

SPL能很方便地嵌入到JAVA應用,可參考 。

具體使用方法可參考 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2700965/,如需轉載,請註明出處,否則將追究法律責任。

相關文章