[NewLife.XCode]高級統計(數據報表利器)


NewLife.XCode是一個有15年歷史的開源數據中間件,支持netcore/net45/net40,由新生命團隊(2002~2020)開發完成並維護至今,以下簡稱XCode。

整個系列教程會大量結合示例代碼和運行日志來進行深入分析,蘊含多年開發經驗於其中,代表作有百億級大數據實時計算項目。

開源地址:https://github.com/NewLifeX/X (求star, 1067+)

 

XCode以添刪改查為基礎,進一步發展了數據統計與分析,本篇將作為大數據分析處理開篇!

!!閱讀本文之前,建議閱讀《高級查詢》

 

分組統計

回顧前文,所有查詢的標准結構都是 Select xxx From table Where yyy Order By zzz Limit 0, 20

分組查詢也不例外,僅僅是在where子句處做文章。

對於最標准的5參數查詢,FindAll(String where, String order, String selects, Int64 startRowIndex, Int64 maximumRows),分組查詢就寫在where參數里面,直接group by字段,甚至還可以 having 。

為了減少字符串拼接的失誤,常用以下擴展寫法:

1,條件表達式WhereExpression后用GroupBy擴展方法,多個待排序字段作為參數

  

 2,條件后加上字段GroupBy,該用法很接近sql寫法  where enable=1 group by roleid,缺點就是不支持多個排序字段

   

如果這兩種擴展都無法滿足要求,那就直接拼接where字符串吧。

 

聚合函數

光有分組查詢足夠,往往還需要配合使用聚合函數,如 Count/Sum/Max/Min/Avg 等。

在標准數據查詢中,這屬於Select部分。

 

 

 常用 FindAll(Expression where, PageParameter page = null, String selects = null) 中,我們把需要聚合的表達式卸載selects參數里面。

  • _.ID.Count() 表示對ID字段做Count計算,默認還是映射到ID字段,計算結構取值時 list[0].ID 就是 count()值
  • _.Logins.Sum() 取 Logins 字段累加,默認映射到 Logins,取結果 list[0].Logins。
  • Sum(aliasName) 也可以指定別名,如果aliasName不是實體類字段,XCode無法映射,只能這樣取值 list[0][aliasName]
  • 最后兩個是分組字段,由於運算符重載的緣故,它們不能放在第一位,可以放在第二位開始的任意位置。

最后得到的SQL語句如下:

Select Count(ID) as ID,Sum(Logins) as Logins,Max(LastLogin) as LastLogin,RoleID,DepartmentID From User Where Enable=1 Group By RoleID,DepartmentID

 

 以上介紹了高級統計的基本用法,實際項目中需要靈活應用。

近幾年工作中,經常用到多字段表達式聚合,並且根據需要寫一些擴展,如Oracle中 _.Status.CaseSum(0, "S0") & _.Status.CaseSum(1, "S1") & _.Status.CaseSum(2, "S2")

CaseSum不受XCode支持,因其只能用在Oracle上,所以在應用項目里面給 FieldItem 做了一個擴展方法。

 

系列教程

NewLife.XCode教程系列[2019版]

  1. 增刪改查入門。快速展現用法,代碼配置連接字符串
  2. 數據模型文件。建立表格字段和索引,名字以及數據類型規范,推薦字段(時間,用戶,IP)
  3. 實體類詳解。數據類業務類,泛型基類,接口
  4. 功能設置。連接字符串,調試開關,SQL日志,慢日志,參數化,執行超時。代碼與配置文件設置,連接字符串局部設置
  5. 反向工程。自動建立數據庫數據表
  6. 數據初始化。InitData寫入初始化數據
  7. 高級增刪改。重載攔截,自增字段,Valid驗證,實體模型(時間,用戶,IP)
  8. 臟數據。如何產生,怎么利用
  9. 增量累加。高並發統計
  10. 事務處理。單表和多表,不同連接,多種寫法
  11. 擴展屬性。多表關聯,Map映射
  12. 高級查詢。復雜條件,分頁,自定義擴展FieldItem,查總記錄數,查匯總統計
  13. 數據層緩存。Sql緩存,更新機制
  14. 實體緩存。全表整理緩存,更新機制
  15. 對象緩存。字典緩存,適用用戶等數據較多場景。
  16. 百億級性能。字段精煉,索引完備,合理查詢,充分利用緩存
  17. 實體工廠。元數據,通用處理程序
  18. 角色權限。Membership
  19. 導入導出。Xml,Json,二進制,網絡或文件
  20. 分表分庫。常見拆分邏輯
  21. 高級統計。聚合統計,分組統計
  22. 批量寫入。批量插入,批量Upsert,異步保存
  23. 實體隊列。寫入級緩存,提升性能。
  24. 備份同步。備份數據,恢復數據,同步數據
  25. 數據服務。提供RPC接口服務,遠程執行查詢,例如SQLite網絡版
  26. 大數據分析。ETL抽取,調度計算處理,結果持久化 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM