位置: 编程技术 - 正文

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一)

  • 土增清算问题
  • 公转私人账户怎么转
  • 员工买东西自己垫付的钱怎么做账
  • 损益类科目是否可以转出
  • 小规模纳税人能用专票抵税吗
  • 通行费电子发票没有通行费字样
  • 车船税是费用吗
  • 综保区和自贸区的联系
  • 当月减少的固定资产当月停止折旧
  • 银行汇票退回
  • 外汇结款怎么办理
  • 定额发票验旧怎么操作
  • 一般纳税人设备租赁税率
  • 小规模纳税人开了3%的专票还能享受1%
  • 客户到款打到子公司账上如何转回
  • 通用申报表工会经费可以不申报吗
  • 往来形式的投资款是借款吗
  • 银行承兑汇票保证金是什么意思
  • bios如何恢复默认值
  • 如何修复在感情中受的伤害
  • mac系统如何开启任何来源
  • 奖金扣税标准税率表
  • 长期股权投资权益法四个明细科目
  • 清除cmos有什么后果
  • php中的预定义变量
  • 前期差错更正怎么理解
  • php访问mysql的五个基本步骤
  • 马纳斯古盐田气候特征
  • 头歌java第一课
  • 公司企业名称变更,银行账号会变吗
  • php的implode函数
  • 如何解决Vue3没有代码提示问题?
  • 开票缴纳的1%个税是多少
  • 员工多交的个人社保
  • 上月的会计分录做错了
  • vue实现简易购物车
  • js中...的用法
  • 浅析中国式现代化的理论价值与现实意义
  • PHP Ajax JavaScript Json获取天气信息实现代码
  • 工业企业成本核算的一般程序包括下列的
  • 客户购买商品的条件?
  • 列入固定资产的金额标准
  • dede织梦怎么转成zblog
  • 公司注销后如何追缴税款
  • 织梦官方网站
  • 出口企业为什么免税又退税
  • 应付账款主要账户有哪些
  • 银行开户费属于现金流量表的哪一类
  • 自用房地产转换为成本模式计量的投资性房地产
  • 企业增值税征收范围
  • 三方协议代付的钱在哪里
  • 其他应付款长期挂账几年必须转收入
  • 当月发生逾期押金收入12870元
  • 公司买车可以少多少钱
  • 经济补偿金如何做账
  • 代开专票作废了扣了两次税怎么办?
  • 收到土地使用权计入什么科目
  • 村集体经济组织架构
  • 房地产预缴税款主表怎么填
  • 以前年度应交税费多计提怎么调平
  • 企业开发是什么专业
  • 每月分红会计分录
  • 主营业务成本做多了怎么办
  • 对公账户 发票
  • windows一键安装
  • w10系统分辨率
  • windows超级管理员默认密码
  • windows8装 .NET 3.5 时出现0x800F081F错误解决方法
  • windows10周年更新
  • linux vmware卸载
  • Linux mysql如何更改root密码以及忘记root密码的修改方法
  • linux we
  • cocos做游戏
  • android 坐标系
  • 批处理计算的特点
  • document.getElementById()为null
  • js调用声音
  • 税务开票明细
  • 建筑工程合同首付款
  • 辽宁省耕地占用税适用税额表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设