如何通过 sequelize 获得行的不同值?

Posted

技术标签:

【中文标题】如何通过 sequelize 获得行的不同值?【英文标题】:How to get a distinct value of a row with sequelize? 【发布时间】:2017-05-22 01:00:52 【问题描述】:

我有值的表

id country 
1  india
2  usa
3  india

我需要使用 sequelize.js 从 country 列中找到不同的值

这里是我的示例代码...

Project.findAll(

    attributes: ['country'],
    distinct: true
).then(function(country) 
     ...............
);

有什么方法可以找到不同的值

【问题讨论】:

【参考方案1】:

试试这个:https://github.com/sequelize/sequelize/issues/2996#issuecomment-141424712

Project.aggregate('country', 'DISTINCT',  plain: false )
.then(...)

【讨论】:

如何为“DISTINCT”列名取别名?它返回一个列名为'DISTINCT'的表 你如何确保它既独特又最新(通过 createdAt)【参考方案2】:

您可以使用 Sequelize.fn 为一个或多个属性指定 distinct

Project.findAll(
    attributes: [
        // specify an array where the first element is the SQL function and the second is the alias
        [Sequelize.fn('DISTINCT', Sequelize.col('country')) ,'country'],

        // specify any additional columns, e.g. country_code
        // 'country_code'

    ]
).then(function(country)   )

【讨论】:

SequelizeDatabaseError: "DISTINCT" 或附近的语法错误 @MuhammadUmer:你找到正确的语法了吗? 我最终写了sql查询,这更容易,而且在js中也做了手工工作 使用 mysql,此解决方案有效 - 确保使用 DISTINCT 字段作为第一个属性。 @Endel 怎么样?因为 sequelize 总是覆盖不同列的位置【参考方案3】:

我最终使用了这样的分组:

Project.findAll(
  attributes: ['country'],
  group: ['country']
).then(projects => 
  projects.map(project => project.country)
);

它会产生不同的模型,您可以很好地迭代。

上一个答案中的链接有点帮助:https://github.com/sequelize/sequelize/issues/2996#issuecomment-141424712

这也很有效,但会生成以 DISTINCT 作为列名的响应:

Project.aggregate('country', 'DISTINCT',  plain: false )
  .then(...)

【讨论】:

【参考方案4】:

您可以使用group 选项,但是为了避免MySQL 错误incompatible with sql_mode=only_full_group_by,您必须将MAX 函数应用于其他属性。

const countries = await Project.findAll(
  attributes: [
    [Sequelize.fn("MAX", Sequelize.col("id")), "id"],
    "country",
  ],
  group: ["country"],
);

应该会生成如下的 sql 查询:

SELECT MAX(`id`) AS `id`, `country` FROM `project` GROUP BY `country`;

【讨论】:

【参考方案5】:

您可以使用原始查询来获取结果或sequelize.fn()

Here’s the documentation on Sequelize raw queries.

【讨论】:

以上是关于如何通过 sequelize 获得行的不同值?的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize,检查行的存在并返回boolean。

sequelize(和 sequelize-cli)queryInterface.createTable 在 PostgreSQL 上,PK id 类型为 UUID 和 defaultValue:Se

如何获得解码/未透视行的唯一计数(列到行)

用dplyr汇总后如何执行计算?

如何获取数据集行的特定版本?

wpf中如何获得dataGrid选中行的值