gpt4 book ai didi

node.js - Sequelize 一张表的多个计数

转载 作者:搜寻专家 更新时间:2023-10-31 23:45:01 25 4
gpt4 key购买 nike

我想从我表中的一列中获取这些列中值类型的总计数。例如,一列是:

|paymentGateway |
---------------
| Paystack |
| Flutterwave |
| NIBSS |
| PAGA |
| Interswitch |
| Paystack |
| Flutterwave |
| NIBSS |
| PAGA |
| Interswitch |
| Paystack |
| Flutterwave |
| NIBSS |
| PAGA |
| Interswitch |

我在 Progress DB Viewer 中运行了查询,它工作正常。这是查询:

SELECT
"paymentGateway",
SUM(1) FILTER (WHERE "paymentGateway" = 'Paystack') AS paystack,
SUM(1) FILTER (WHERE "paymentGateway" = 'NIBSS') AS nibss,
SUM(1) FILTER (WHERE "paymentGateway" = 'Flutterwave') AS flutterwave,
SUM(1) FILTER (WHERE "paymentGateway" = 'Interswitch') AS interswitch,
SUM(1) FILTER (WHERE "paymentGateway" = 'PAGA') AS paga
FROM
"Transactions"
GROUP BY
"paymentGateway"

上面的查询工作正常并在这里给出了这个结果:

Query Result

现在,我尝试在我的代码中执行相同的查询。因此,我首先尝试运行原始查询:

db.sequelize.query('SELECT  "paymentGateway",   SUM(1) FILTER (WHERE "paymentGateway" = "Paystack") AS paystack,    SUM(1) FILTER (WHERE "paymentGateway" = "NIBSS") AS nibss,  SUM(1) FILTER (WHERE "paymentGateway" = "Flutterwave") AS flutterwave,  SUM(1) FILTER (WHERE "paymentGateway" = "Interswitch") AS interswitch,  SUM(1) FILTER (WHERE "paymentGateway" = "PAGA") AS paga FROM    "Transactions" GROUP BY     "paymentGateway"').then(data => {
console.log('Query Result', data)
return res.status(200).send({ message: 'Completed Successfully' })
}).catch(err => {
console.log('Query Error: ', err)
return res.status(200).send({ message: 'Completed Successfully' })
})

这是给我 SequelizeDatabaseError: column "Paystack"does not exist

我决定进行一些谷歌搜索并通读 Sequelize 文档。那是我得到这个的地方:

Transaction.findAndCountAll({
attributes: [
[db.sequelize.fn('COUNT', db.sequelize.col('paymentGateway') === 'NIBSS'), 'nibss'],
[db.sequelize.fn('COUNT', db.sequelize.col('paymentGateway') === 'Paystack'), 'paystack'],
[db.sequelize.fn('COUNT', db.sequelize.col('paymentGateway') === 'Flutterwave'), 'flutterwave'],
[db.sequelize.fn('COUNT', db.sequelize.col('paymentGateway') === 'Interswitch'), 'interswitch'],
[db.sequelize.fn('COUNT', db.sequelize.col('paymentGateway') === 'PAGA'), 'paga']
],
group: '"paymentGateway"'
}).then(data => {
// console.log('Query Result', data)
console.log('Query Length', data.count)
console.log('Query Datavalues', data.rows.map(obj => obj.dataValues))
return res.status(200).send({ message: 'Completed Successfully' })
}).catch(err => {
console.log('Query Error: ', err)
return res.status(200).send({ message: 'Completed Successfully' })
})

上面的查询给了我一个我能理解的结果,但与之交互没有那么有意义。

Query Length [ { count: '3940' },
{ count: '3838' },
{ count: '4066' },
{ count: '4092' },
{ count: '4065' } ]
Query Datavalues [ { nibss: '3940',
paystack: '3940',
flutterwave: '3940',
interswitch: '3940',
paga: '3940' },
{ nibss: '3838',
paystack: '3838',
flutterwave: '3838',
interswitch: '3838',
paga: '3838' },
{ nibss: '4066',
paystack: '4066',
flutterwave: '4066',
interswitch: '4066',
paga: '4066' },
{ nibss: '4092',
paystack: '4092',
flutterwave: '4092',
interswitch: '4092',
paga: '4092' },
{ nibss: '4065',
paystack: '4065',
flutterwave: '4065',
interswitch: '4065',
paga: '4065' } ]

如果有人能帮助我理解我做错了什么,我将不胜感激。谢谢

最佳答案

所以,经过更多的谷歌搜索,我终于能够自己解决这个问题。下面是我的实现:

Transaction.findAll({
attributes: [
'paymentGateway',
[db.sequelize.fn('COUNT', db.sequelize.col('paymentGateway')), 'count']
],
group: 'paymentGateway',
raw: true,
logging: true
}).then(data => {
console.log('Query Result', data)
return res.status(200).send({ message: 'Completed Successfully' })
})

结果:

Query Result 
[
{ paymentGateway: 'Paystack', count: '3966' },
{ paymentGateway: 'PAGA', count: '3954' },
{ paymentGateway: 'Flutterwave', count: '3995' },
{ paymentGateway: 'Interswitch', count: '4118' },
{ paymentGateway: 'NIBSS', count: '3968' }
]

关于node.js - Sequelize 一张表的多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49225930/

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