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

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

作者头像
大石头
发布于 2020-03-19 03:30:58
发布于 2020-03-19 03:30:58
1.2K00
代码可运行
举报
文章被收录于专栏:智能大石头智能大石头
运行总次数:0
代码可运行

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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[NewLife.XCode]高级查询(化繁为简、分页提升性能)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
1.3K0
[NewLife.XCode]高级增删改
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
1.6K0
[NewLife.XCode]增删改查入门
NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
8670
[NewLife.XCode]批量添删改操作(提升吞吐率)
NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2020)开发完成并维护至今,以下简称XCode。
大石头
2022/05/10
6340
[NewLife.XCode]实体类详解
NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
1.3K0
[NewLife.XCode]百亿级性能
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
9730
[NewLife.XCode]数据模型文件
NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
8480
[NewLife.XCode]增量累加
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
1.7K0
[NewLife.XCode]角色权限
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/07/02
2.2K0
sql中的 where 、group by 和 having 用法解析
–如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术
Twcat_tree
2022/11/30
13.2K0
[NewLife.XCode]对象字典缓存(百万军中取敌首级)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
1.2K0
【MySQL数据库】 数据库的基本查询 DQL
根据定义,聚合函数对一组值执行计算并返回单个值。. MySQL提供了许多聚合函数,包括 AVG , COUNT , SUM , MIN , MAX 等。. 除 COUNT 函数外,其它聚合函数在执行计算时会忽略 NULL 值。
小小程序员
2022/12/01
6.3K1
Oracle数据库学习笔记 (四 —— select 从入门到放弃 【下】)
Oracle 数据库查询专题 (select * from emmmm 80 T)
Gorit
2021/12/09
1.2K0
MySQL数据库——数据库CRUD之基本DML增删改表操作及DQL查表操作
           select                 字段列表            from                 表名列表            where                 条件列表            group by                 分组字段            having                  分组之后的条件            order by                  排序            limit                  分页限定  
Winter_world
2020/09/25
1K0
MySQL数据库——数据库CRUD之基本DML增删改表操作及DQL查表操作
【数据库设计和SQL基础语法】--查询数据--分组查询
分组查询是一种 SQL 查询技术,通过使用 GROUP BY 子句,将具有相同值的数据行分组在一起,然后对每个组应用聚合函数(如 COUNT、SUM、AVG等)。这允许在数据集中执行汇总和统计操作,以便更清晰地理解和分析数据的特征。分组查询常用于对大量数据进行聚合和摘要,提供有关数据分布和特征的洞察。
喵叔
2023/12/18
1.2K0
数据库的查询操作
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null 表达式1:哪个字段需要判断是否为null 如果该字段为null后的替换值。 如图所示:
Twcat_tree
2023/02/20
8910
数据库的查询操作
MySQL数据库——分组查询
分组以后可以配合count()、agv()、sum()、max()等聚合函数使用。
落雨
2022/03/06
44.2K0
GROUP BY与COUNT用法详解
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
全栈程序员站长
2022/08/24
2.8K0
GROUP BY与COUNT用法详解
MySQL数据库基础(十):DQL数据查询语言
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。
Lansonli
2024/03/19
1560
MySQL数据库基础(十):DQL数据查询语言
软件测试之学习mysql的查询功能select及高级查询(重中之重)
(adsbygoogle = window.adsbygoogle || []).push({ google_ad_client: "ca-pub-6940460185323525", enable_page_level_ads: true }); 单表查询(select): 单表全部字段查询:select * from 表名 ; 单表部分字段查询:select 字段1,字段2,字段3,…from 表名; 单表查询条件查询:select 字段1,字段2,… from 表名 wh
吾爱乐享
2018/07/12
1.3K0
相关推荐
[NewLife.XCode]高级查询(化繁为简、分页提升性能)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验