gpt4 book ai didi

sql - 使用 NodeJS 应用程序的 Sequelize 函数在 PostgreSQL 中实现两级聚合

转载 作者:行者123 更新时间:2023-12-03 22:34:34 24 4
gpt4 key购买 nike

大家好,请在这里忍受我。我正在使用 PostgreSQL、Sequelize、Express 和 NodeJS 创建后端。我想知道这些原始查询代码行是否可以使用 Sequelize Model findAll 函数来实现。
首先,我在这里要做的是计算这些学生的总分。以下是一些表格及其关系。

                 Student                               Level
| student_id | name | level_id | | level_id | level_name |
|:----------:|:----------:|:--------:| |:--------:|:----------:|
| 1 | John | 1 | > | 1 | Rookie |
| 2 | Jane | 2 | | 2 | Expert |

v

StudentQuiz
| quiz_id | student_id | score |
|:----------:|:----------:|:--------:|
| 1 | 1 | 40 |
| 1 | 1 | 100 |
| 2 | 1 | 80 |
| 1 | 2 | 100 |
| 2 | 2 | 100 |
如果我运行下面的代码行。
   SELECT table2.student_id,
s.canvasser_name,
l.level_name,
table2.total_score
FROM (SELECT table1.student_id,
sum(table1.max_score) total_score
FROM (SELECT sq.student_id,
max(sq.score) max_score
FROM public.StudentQuiz sq
GROUP BY sq.quiz_id, sq.student_id) table1
GROUP BY table1.student_id) table2
INNER JOIN public.Student s
ON s.student_id = table2.student_id
INNER JOIN public.Level l
ON l.level_id = s.level_id
ORDER BY table2.total_score DESC
LIMIT 10;
我会得到这样的东西。
| student_id |    name    |  level   |   total_score  |
|:----------:|:----------:|:--------:|:--------------:|
| 1 | John | Rookie | 180 |
| 2 | Jane | Expert | 200 |
请注意,如果找到多个具有相同 ID 的测验,我将选择最高分。
无论如何,我想使用 sequelize 内置函数来实现它。我一直在尝试做的是这样的事情。
    const result = await StudentQuiz.findAll({
attributes: ['studentId', [sequelize.fn('sum', sequelize.fn('max', sequelize.col('score'))), 'totalPrice'], 'quizId'],
group: 'studentId',
include: [
{
model: Student,
include: [{
model: Level
}],
},
],
offset: 0,
limit: 10
});
上面的代码会抛出一条错误消息,即“不能嵌套聚合函数调用”。
任何形式的帮助将不胜感激。谢谢你。
附言我知道我可以使用 sequelize.query() 函数来使用显示的第一个代码块,但这不是重点。

最佳答案

Sequelize 不适用于使用模型的复杂聚合。其主要目标是为 CRUD 操作提供模型。
要在这种情况下使用模型,您可以使用模型定义来获取模式、表名和字段,从而在不知道确切字段名的情况下动态构建查询。

关于sql - 使用 NodeJS 应用程序的 Sequelize 函数在 PostgreSQL 中实现两级聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62723411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com