首页 > 解决方案 > 我想使用 sequelize 计算 Postgresql db 中列的唯一组合

问题描述

我有一个包含 x 和 y 列的 db 表,我想计算 x 和 y 列的唯一组合,并使用 sequelize 查询获取计数值。 在此处输入图像描述

我想要这样的查询结果

[
  { x: 821, y: 289, value: 1 },
  { x: 819, y: 290, value: 1 },
  { x: 820, y: 290, value: 1 },
  { x: 821, y: 291, value: 1 },
  { x: 823, y: 293, value: 2 },
  { x: 822, y: 291, value: 5 },
  { x: 820, y: 291, value: 1 },
  { x: 821, y: 290, value: 1 },
  { x: 823, y: 291, value: 2 },
..............................]

我试过了,但没有得到所需的结果

tableData.findAll({
      attributes:[ ["x", "y"],
      [db.fn('COUNT', (db.fn('DISTINCT', db.col("x"), db.col("y")))), "value"]
    ],
      where: {
        store_id: storeId,
        zone_id: zoneId,
        timestamp: {
          [Op.between]: [starDate, endDate],
        },
      },
      group: [["x","y"],"timestamp"],
      order: [
        ['timestamp', 'DESC'],
    ],
      limit: 2000
    }).then((data) => {

上面的查询给了我这样的数据,这是错误的格式

[
  { y: '819', value: '1' }, { y: '820', value: '1' }, { y: '821', value: '1' },
  { y: '820', value: '1' }, { y: '821', value: '2' }, { y: '822', value: '1' },
  { y: '823', value: '1' }, { y: '823', value: '2' }, { y: '822', value: '2' },
  { y: '823', value: '1' }, { y: '824', value: '1' }, { y: '819', value: '1' },
  { y: '821', value: '1' }, { y: '823', value: '2' }, { y: '817', value: '2' },
  { y: '819', value: '1' }, { y: '820', value: '1' }, { y: '821', value: '1' }...]

谁能帮我这个?

标签: postgresqlsequelize.js

解决方案


在整个查询过程中,我试图在这里和那里做一些小改动,最后,我得到了我想要的格式的数据。发布我的答案,希望它对其他人有用。

如果我错了或者你有更好的方法,请纠正我。

tableData.findAll({
      attributes:["x", "y",
      [db.fn('COUNT', db.col("*")), "value"]
    ],
      where: {
        store_id: storeId,
        zone_id: zoneId,
        timestamp: {
          [Op.between]: [starDate, endDate],
        },
      },
      group: ["x","y"],
      limit: 2000
    }).then((data) => {})

推荐阅读