MySQL 在 Sequelize 中的聚合函数以及分组操作

MySQL 在 Sequelize 中的聚合函数以及分组操作

阅读更多:MySQL 教程

什么是聚合函数?

MySQL 中,聚合函数用于对一组数据进行计算并返回一个单一的值。聚合函数包括以下几种:

  • SUM
  • AVG
  • MAX
  • MIN
  • COUNT

以下是这些聚合函数在 Sequelize 中的使用方式。

Sequelize 中的聚合函数

首先,我们需要在 Sequelize 中使用一些内置的聚合函数。Sequelize 内置有以下聚合函数:

const { sequelize: {
    functions: { fn },
    Op },
} = require('sequelize');

// sum
fn('SUM', fn('column_name'), 'alias_name')

// avg
fn('AVG', fn('column_name'), 'alias_name')

// max
fn('MAX', fn('column_name'), 'alias_name')

// min
fn('MIN', fn('column_name'), 'alias_name')

// count
fn('COUNT', fn('column_name'), 'alias_name')

这是最基本的聚合函数。我们可以使用其中任意一个来对我们的查询结果进行计算。

示例

假设我们有一张名为 purchases 的表格,其数据如下:

id item price quantity user_id
1 apple 10.00 2 1
2 orange 15.00 1 2
3 apple 5.00 3 1
4 banana 12.00 2 3
5 cherry 20.00 1 2

使用 Sequelize,我们可以使用以下方法计算某种产品的总价:

const result = await models.Purchase.findAll({
  attributes: [
    [fn('SUM', fn('product_price')), 'total_price']
  ],
  where: {
    product_name: 'apple',
  },
});

console.log('total price of apple:', result[0].dataValues.total_price);

这将打印出:

total price of apple: 20

我们也可以使用以下方法对用户进行分类,计算每个用户购买的总价:

const result = await models.Purchase.findAll({
  attributes: [
    'userId',
    [fn('SUM', fn('product_price')), 'total_price']
  ],
  group: ['userId'],
});

console.log(result.map(r => `{r.userId}:{r.dataValues.total_price}`));

这将打印出:

1: 30
2: 35
3: 24

Sequelize 中的分组操作

分组操作允许我们对结果进行分类,使得我们可以计算每组的聚合值。Sequelize 提供了一种简单的方法来实现这个功能:

const result = await models.Purchase.findAll({
  attributes: [
    'product_name',
    [fn('SUM', fn('product_price')), 'total_price']
  ],
  group: ['product_name'],
});

console.log(result.map(r => `{r.product_name}:{r.dataValues.total_price}`));

这将打印出:

apple: 25
banana: 12
cherry: 20
orange: 15

我们可以使用一个简单的查询语句来获得与此相同的结果:

SELECT product_name, SUM(product_price) AS total_price
FROM purchases
GROUP BY product_name;

总结

在 Sequelize 中使用聚合函数和分组操作允许我们更方便地计算结果,并对其进行分类。对于需要对大量数据进行计算的场景,这些功能可以大大减轻我们的负担。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程