在 node.js 中,我想獲得具有STRINGdataType 和 value的一列的總和"367793582429824"。
我只是像下面提到的那樣嘗試,但它拋出了一個錯誤 SequelizeDatabaseError: column "assetamount" does not exist
[
sequelize.fn("sum", sequelize.col("assetAmount")), "totalAssetAmount",
],
模型是,
module.exports = (sequelize, DataTypes) => {
const items = sequelize.define("Items", {
id: {
allowNull: false,
type: DataTypes.UUID,
primaryKey: true,
autoIncrement: true,
},
assetAmount: {
type: Sequelize.STRING,
allowNull: false,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
};
另外我想計算此列的平均值,如何獲得此列的 SUM 和 AVG?
uj5u.com熱心網友回復:
我剛剛在擠壓中創建了與 urs 相同的 shema 并運行查詢以獲得總和和平均值,您可以使用此代碼在我的最后作業..
"use strict";
module.exports = (sequelize, DataTypes) => {
var Item = sequelize.define(
"Item",
{
assetAmount: {
type: DataTypes.STRING,
allowNull: false,
},
},
{
freezeTableName: true,
}
);
return Item;
};
資料庫資料

這是我對 sum 和 avg 的查詢
let resp = await model.Item.findAll({
attributes: [[
model.sequelize.fn("sum", model.sequelize.col("assetAmount")), "totalAssetAmount",
], [model.sequelize.fn('AVG', model.sequelize.col('assetAmount')), 'avgRating']]
});
console.log(resp)
這是你需要的回應
[
{
"totalAssetAmount": 1469134,
"avgRating": 734567
}
]
uj5u.com熱心網友回復:
由于您的 dataType 在 STRING 中并且SUM或者AVG是一個數字函式,首先您需要將該列轉換為整數。
const { Sequelize } = require('sequelize')
let resp = await model.Item.findAll({
attributes: [
[Sequelize.fn("SUM", Sequelize.cast(Sequelize.col("assetAmount"), 'integer')), "totalAssetAmount"],
[Sequelize.fn('AVG', Sequelize.cast(Sequelize.col('assetAmount'), 'integer')), 'avgAssetAmount']
]
});
** 請注意,如果列中有非數字資料,則此 SQL 將失敗。例如,如果您有 1 行 with assetAmount = 'hello',則此 SQL 將引發例外
一些緩解想法:
- 使用
where選項過濾掉所有非數字行。 - 使用validate強制在列中包含所有數字資料
- 將資料庫的架構修改為數字列
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380943.html
標籤:节点.js PostgreSQL的 和 sequelize.js 平均
上一篇:在psql上轉義引號以避免SQLInjections
下一篇:資料轉換產生意想不到的結果
