位置: 编程技术 - 正文

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

发布时间:2024-02-27

推荐整理分享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一)

  • 天然气管道维修收费标准
  • 房产税相关问题
  • 法人股东分红要交企业所得税吗
  • 个体工商户怎么变更法人
  • 权益法核算投资收益
  • 录入凭证需要做哪些工作
  • 企业销售赠券的增值税如何处理
  • 公司缴纳工会经费会计分录怎么写
  • 年底给职工发啥实物
  • 跨年度取得增值税发票能否抵扣?
  • 什么时候需要计提税金及附加
  • 个人如何开具增值税普票
  • 可以对开发票吗
  • 2016年172号
  • 中介公司属于工业企业吗
  • 应交增值税进项税额转出
  • 股东与公司之间是什么关系
  • 机器用润滑油怎么使用
  • 企业信息公示社保信息怎么填,公司没有交
  • deepin20.1怎么样
  • win11卓越性能模式
  • 资本公积是什么会计要素
  • 企业将自有资金无偿提供
  • 腾讯电脑管家的信任区在哪里
  • linux从入门到什么搞笑
  • 在windows7操作具有
  • 增值税专用发票有几联?
  • 进口增值税采集
  • 期间费用计算公式
  • 对公贷款利息支付
  • 微信小程序开发零基础入门
  • phpweb框架
  • 销售多余的材料
  • 2021年中小企业税收减免政策
  • dos命令暂停停10s
  • 命名空间 php
  • 旅行社代订机票可以报销吗
  • 开发项目完工后多久开工
  • 质保金如果以后可以退吗
  • 年底本年利润需要结转吗
  • 理财利息可以计息吗
  • 固定资产报废如何交增值税
  • 建筑业工会经费计提比例
  • 暂估入账后续处理
  • 企业费用发票有哪些可以入账
  • 应付账款重分类是什么意思
  • 出口退税后发生退货补缴怎么算增值税
  • 少计提的税费如何补提
  • 补交进项转出的税分录
  • 门面转让费做账怎么做
  • 公司向股东借款最新规定
  • 子公司利润母公司还有其他方式吗
  • 固定制造费用包括变动制造费用吗
  • 车属于固定资产嘛
  • 为什么要用支票取钱
  • mysql如何优化性能
  • sql平均数函数
  • mysql数据库的总结
  • win8.1无法进入系统
  • 苹果mac操作系统版本
  • linux用户权限管理
  • emule.td文件怎么打开
  • windows任务计划程序
  • Win7旗舰版系统文件名称
  • 简洁桌面怎么设置
  • linux的web服务器
  • win10升级补丁后死机
  • Zen Coding css,html缩写替换大观 快速写出html,css
  • js计数排序
  • shell基础教程
  • jquery.min.js源代码
  • js模块化开发教程
  • Unity for Absolute Beginners(三)
  • unity3d unreal
  • python文件描述符
  • js register
  • android按钮按下变色
  • 饮料开专票几个点
  • 税务投诉撤销申诉
  • 教育培训行业的发展
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号