前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[NewLife.XCode]高级统计(数据报表利器)

[NewLife.XCode]高级统计(数据报表利器)

作者头像
大石头
发布2020-03-19 11:30:58
1.2K0
发布2020-03-19 11:30:58
举报
文章被收录于专栏:智能大石头

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字段,计算结构取值时 list0.ID 就是 count()值
  • _.Logins.Sum() 取 Logins 字段累加,默认映射到 Logins,取结果 list0.Logins。
  • Sum(aliasName) 也可以指定别名,如果aliasName不是实体类字段,XCode无法映射,只能这样取值 list0
  • 最后两个是分组字段,由于运算符重载的缘故,它们不能放在第一位,可以放在第二位开始的任意位置。

最后得到的SQL语句如下:

代码语言:javascript
复制
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 做了一个扩展方法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分组统计
  • 聚合函数
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档