位置: 编程技术 - 正文
推荐整理分享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语句如下:
二、使用示例
现在订单表,数据如下:
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 转载请保留说明!友情链接: 武汉网站建设