MySQL SUM 聚合函数和 GROUP BY 子句的查询操作

MySQL SUM 聚合函数和 GROUP BY 子句的查询操作

在 Sequelize 中实现 MySQLSUM 聚合函数和 GROUP BY 子句的查询操作。

阅读更多:MySQL 教程

什么是 SUM 和 GROUP BY

SUM 是一个聚合函数,用于计算数值字段的总和。它可以与 GROUP BY 子句一起使用,将结果按照分组分类,再对每组数据进行求和操作。

例如,我们有一个保存订单和商品价格的表 orders,其中两列为 pricequantity。我们可以按照商品名字分组,计算每类商品的总销售额,代码如下:

const { Order } = require('./models');

Order.findAll({
  attributes: [
    'name',
    [sequelize.fn('SUM', sequelize.col('price * quantity')), 'total_sales']
  ],
  group: ['name']
})
JavaScript

该查询可生成如下的 SQL 语句:

SELECT name, SUM(price * quantity) AS total_sales
FROM orders
GROUP BY name
SQL

实现 SUM 和 GROUP BY

Sequelize 提供了 fn 函数和 col 函数,来实现类似 SQL 的聚合函数操作。

fn 函数用于定义 SQL 函数,例如 SUMCOUNTMAXMIN,而 col 函数用于获取列名。要计算出 pricequantity 的乘积,可以使用数据库的数学函数 ABS。因此,在 Sequelize 中,我们可以这样实现:

[sequelize.fn('SUM', sequelize.fn('ABS', sequelize.fn('product.price * order.quantity'))), 'total_sales']
JavaScript

然后,对于 GROUP BY 子句,我们只需在 findAll 的选项中添加 group 参数即可:

group: ['name']
JavaScript

完整示例

为了完整演示这个示例,我们需要创建一个表 order,并插入一些样例数据:

const { Sequelize, Model, DataTypes } = require('sequelize');

const sequelize = new Sequelize('mysql://user:password@localhost:3306/database');

class Order extends Model {}
Order.init({
  name: DataTypes.STRING,
  price: DataTypes.FLOAT,
  quantity: DataTypes.INTEGER
}, { sequelize, modelName: 'order' });

(async () => {
  await sequelize.sync({ force: true });
  await Order.bulkCreate([
    { name: 'apple', price: 0.99, quantity: 10 },
    { name: 'orange', price: 1.5, quantity: 5 },
    { name: 'banana', price: 0.5, quantity: 20 }
  ]);
})();
JavaScript

然后,我们可以使用以下代码实现上述聚合查询:

const { Order } = require('./models');

(async () => {
  const result = await Order.findAll({
    attributes: [
      'name',
      [sequelize.fn('SUM', sequelize.fn('ABS', sequelize.fn('order.price * order.quantity'))), 'total_sales']
    ],
    group: ['name']
  });
  console.log(result);
})();
JavaScript

最后,运行该脚本,我们将会得到以下输出:

[
  { name: 'apple', total_sales: 9.9 },
  { name: 'banana', total_sales: 10 },
  { name: 'orange', total_sales: 7.5 }
]
Mysql

总结

在 Sequelize 中实现 MySQL 的 SUM 函数和 GROUP BY 子句非常简单。只需使用 fn 函数和 col 函数即可。记住,使用组合式函数时,要小心处理操作顺序。如果您想对 Sequelize 有更深入的了解,请务必阅读官方文档。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册