位置: 编程技术 - 正文

Sequelize中用group by进行分组聚合查询(sequelize join)

编辑:rootadmin

推荐整理分享Sequelize中用group by进行分组聚合查询(sequelize join),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sequelize.define,sequelize-cli,sequelize include,sequelize findall,sequelize include,sequelize include,sequelize使用,sequelize include,内容如对您有帮助,希望把文章链接给更多的朋友!

一、SQL与Sequelize中的分组查询

1.1 SQL中的分组查询

SQL查询中,通GROUP BY语名实现分组查询。GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在ORDER BY子句中。分组查询后,查询结果为一个或多个列分组后的结果集。

GROUP BY语法

在以上语句中:

聚合函数 - 分组查询通常要与聚合函数一起使用,聚合函数包括:

COUNT()-用于统计记录条数 SUM()-用于计算字段的值的总和 AVG()-用于计算字段的值的平均值 MAX-用于查找查询字段的最大值 MIX-用于查找查询字段的最小值

GROUP BY子名-用于指定分组的字段

HAVING子名-用于过滤分组结果,符合条件表达式的结果将会被显示

WITH ROLLUP子名-用于指定追加一条记录,用于汇总前面的数据

1.2 Sequelize中的分组查询

使用聚合函数

Sequelize提供了聚合函数,可以直接对模型进行聚合查询:

aggregate(field, aggregateFunction, [options])-通过指定的聚合函数进行查询 sum(field, [options])-求和 count(field, [options])-统计查询结果数 max(field, [options])-查询最大值 min(field, [options])-查询最小值

以上这些聚合函数中,可以通过options.attributes、options.attributes属性指定分组相关字段,并可以通过options.having指定过滤条件,但没有直接指定WITH ROLLUP子句的参数。

如,使用.sum()查询订单数量大于1的用户订单额:

生成的SQL语句如下:

使用聚合参数

除直接使用聚合函数外,也可以在findAll()等方法中,指定聚合查询相关参数实现聚合查询。查询时,同样可以通过通过options.attributes、options.attributes属性指定分组相关字段,并可以通过options.having指定过滤条件。与直接使用聚合函数查询不一样,通过参数构建聚合查询时,要以数组或对象形式设置options.attributes参数中的聚合字段,并需要通过sequelize.fn()方法传入聚合函数。

如,使用.findAll()查询订单数量大于1的用户订单额:

生成的SQL语句如下:

Sequelize中用group by进行分组聚合查询(sequelize join)

二、使用示例

现在订单表,数据如下:

2.1 简单使用

使用分组查询,统计每个客户的订单总额。

使用SQL语句,可以像下面这样查询:

而在Sequelize中可以像下面这样实现:

2.2 使用HAVING子句

统计订单数量大于1的用户的订单总金额。

使用SQL语句,可以像下面这样实现:

而使用Sequelize可以像下面这样查询:

2.3 使用WITH ROLLUP子句

WITH ROLLUP子句是MySQL 5.5+新增的特性,用于汇总统计结果。但本文发布时,Sequelize还不支持该特性。

增加总和统计列:

2.4 连接查询与分组

为了管理方便,我们会将不同的信息保存在不同的表中。如,我们会将订单信息放在一张表中,而将客户信息保存在另一张表中。对于存在关联关系的两张表,我们会使用连接查询来查找关联数据,在进行连接查询时,同样可以以使用聚合函数。

订单表如下:

客户表结构如下:

使用连接查询并分组查询,统计每个客户的订单总额。

使用SQL语句查询如下:

Sequelize中进行连接查询时,首先需要建立模型间的关联关系:

连接查询及分组:

总结

标签: sequelize join

本文链接地址:https://www.jiuchutong.com/biancheng/374111.html 转载请保留说明!

上一篇:解析NodeJs的调试方法(nodejs调试指南)

下一篇:解决Window10系统下Node安装报错的问题分析(windows 10一)

  • 企业间无息借款合法吗
  • 增值税期末留底退税政策解读
  • 建筑公司收到劳务发票会计分录
  • 运输费全额抵扣什么意思
  • 医疗服务收入占比标准
  • 建筑公司收到材料发票
  • 分期付款方式销售货物什么时候确认收入
  • 旅游开发公司有什么职位
  • 企业所得税年报补报
  • 全额抵扣的发票怎样入账
  • 去年多计提的生育津贴
  • 地产佣金收入属什么收入
  • 营改增后不动产销售增值税 5%还是9%
  • 一般纳税人进项发票认证操作流程
  • 收到的借款利息计入什么科目
  • 变更税务登记证法人需要哪些资料
  • 季报是根据什么制定的
  • 开普票可以抵扣进项票
  • 费用未入账是什么意思
  • 电话费发票个人抬头可以税前扣除
  • 保险车辆折旧的计算方法有哪些
  • 五月份开的发票但是七月冲红了七月增值税怎么报
  • 酷狗云盘是干什么用的
  • php如何导入数据库
  • 不用命令打开组策略
  • 上季度成本多结转了怎么调
  • 苹果最小的充电器是哪一款
  • 火星车百家号
  • Cusco Cathedral on the Plaza de Armas, Cusco, Peru (© sharptoyou/Shutterstock)
  • 企业长期资金来源有哪些
  • 结转去年成本
  • win10下 yolov8 tensorrt模型加速部署【实战】
  • iterator用法 移除对象
  • 企业所得税申报表资产总额怎么填
  • 房产税的租金收入按什么计算的
  • 计提工资扣社保的凭证
  • 为员工购买意外险会计处理
  • 购买电脑的过程
  • 租赁收入的成本包括哪些
  • sqlserver无法打开备份设备
  • Postgre数据库Insert 、Query性能优化详解
  • sql2008数据库维护计划
  • 没进项发票开销项发票是可以吗?
  • 营业外收入交企业所得税吗
  • 税前扣除原则和扣除金额
  • 话费报销属于什么费用
  • 小微企业的认定由哪个部门负责
  • 退货销售折让会计分录
  • 内地汇丰银行账户管理费
  • 收到税务局汇算清缴退所得税怎么做账
  • 餐饮服务属于什么职业
  • 银行固定资产有哪些
  • 办公费用包含哪里费用
  • 存货明细账余额合计与存货总账余额相同
  • sqlserver锁机制
  • sql数据库死锁产生的原因及解决方案
  • sqlgun
  • mysql转换数据类型
  • centos如何运行程序
  • openmpi编译
  • vmware怎么放大虚拟机
  • 七喜r11c笔记本
  • wcesmgr.exe - wcesmgr 是什么进程
  • centos查询所有用户
  • 初学excel零基础教学视频
  • linux那么多命令怎么记
  • pycharm远程调试代码
  • python3 生成器
  • python int 转 float
  • 菜鸟 安卓
  • python语言怎么用
  • linuxssh免密登录
  • javascript构造函数创建对象
  • jquery mvvm框架
  • android的动画有哪些?
  • cocos2d-x安装
  • 季度企业所得税分录
  • 房屋契税和维修基金是开发商交还是业主交
  • 考公务员国家税务局好吗
  • 一般纳税人企业是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设