Knex 计算每个月的平均值
Knex calculate avg in each month
我有一个用时间类型定义的列和一个用日期类型定义的列。
knex.schema.createTable('receipt', function(table) {
...
table.double('money');
table.timestamp('createdAt');
...
});
存储2个月的数据。
[
{
"money": 18.80,
"createdAt": "2021-12-01T22:20:00.000Z",
},
{
"money": 38.80,
"createdAt": "2021-11-01T22:20:00.000Z",
},
]
使用SQL
查询和计算平均金额时
SELECT createdMonth, avg(money) FROM
(
SELECT MONTH(createdAt) as `createdMonth`, money FROM receipt
) subTable
group by createdMonth
如何在 Knexjs 中做到这一点。非常感谢。
创建一个视图(而不是加入table,我以前是创建视图)
async function createRoleStaffView() {
let fields = [
`money`,
knex.raw(`MONTH(createdAt) as ${DISTINCT_MONTH}`),
`createdAt`
];
var viewDefinition = knex.select(fields).from("receipt");
return knex.schema.raw('CREATE OR REPLACE VIEW ?? AS (\n' + viewDefinition + '\n)', ["receipt"]).then(() => {
Logger.info("ResourceAccess", "[DONE]createOrReplaceView: receipt");
});
}
最后,查询一下。
knex("receipt").select(DISTINCT_MONTH).avg({ avgMoney: "money" }).groupBy(DISTINCT_MONTH);
我有一个用时间类型定义的列和一个用日期类型定义的列。
knex.schema.createTable('receipt', function(table) {
...
table.double('money');
table.timestamp('createdAt');
...
});
存储2个月的数据。
[
{
"money": 18.80,
"createdAt": "2021-12-01T22:20:00.000Z",
},
{
"money": 38.80,
"createdAt": "2021-11-01T22:20:00.000Z",
},
]
使用SQL
查询和计算平均金额时SELECT createdMonth, avg(money) FROM
(
SELECT MONTH(createdAt) as `createdMonth`, money FROM receipt
) subTable
group by createdMonth
如何在 Knexjs 中做到这一点。非常感谢。
创建一个视图(而不是加入table,我以前是创建视图)
async function createRoleStaffView() {
let fields = [
`money`,
knex.raw(`MONTH(createdAt) as ${DISTINCT_MONTH}`),
`createdAt`
];
var viewDefinition = knex.select(fields).from("receipt");
return knex.schema.raw('CREATE OR REPLACE VIEW ?? AS (\n' + viewDefinition + '\n)', ["receipt"]).then(() => {
Logger.info("ResourceAccess", "[DONE]createOrReplaceView: receipt");
});
}
最后,查询一下。
knex("receipt").select(DISTINCT_MONTH).avg({ avgMoney: "money" }).groupBy(DISTINCT_MONTH);