首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对一个表执行多个计数

对一个表执行多个计数
EN

Stack Overflow用户
提问于 2018-03-11 22:46:35
回答 1查看 5.7K关注 0票数 7

从表中的一列中,我希望获得这些列中值类型的和计数。例如,有一列是:

代码语言:javascript
复制
|paymentGateway |
---------------
|   Paystack    |
|   Flutterwave |
|   NIBSS       |
|   PAGA        |
|   Interswitch |
|   Paystack    |
|   Flutterwave |
|   NIBSS       |
|   PAGA        |
|   Interswitch |
|   Paystack    |
|   Flutterwave |
|   NIBSS       |
|   PAGA        |
|   Interswitch |

我在Progress DB Viewer中运行了查询,它运行得很好。这是一个查询:

代码语言:javascript
复制
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"

上面的查询很好,并在这里给出了这个结果:

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

代码语言:javascript
复制
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文档。这就是我得到这个的原因:

代码语言:javascript
复制
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' })
  })

上面的查询给了我一个我理解的结果,但与之交互的意义不大。

代码语言:javascript
复制
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' } ]

如果有人能帮我理解我做错了什么,我会很感激的。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-13 10:09:21

所以,经过更多的搜索,我终于能够自己解决这个问题了。以下是我的执行情况:

代码语言:javascript
复制
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' })
})

其结果是:

代码语言:javascript
复制
Query Result 
[ 
  { paymentGateway: 'Paystack', count: '3966' },
  { paymentGateway: 'PAGA', count: '3954' },
  { paymentGateway: 'Flutterwave', count: '3995' },
  { paymentGateway: 'Interswitch', count: '4118' },
  { paymentGateway: 'NIBSS', count: '3968' } 
]
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49225930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档