我有价值表
id country
1 india
2 usa
3 india
我需要使用sequelize.js
从country列中找到不同的值这里是我的示例代码......
Project.findAll({
attributes: ['country'],
distinct: true
}).then(function(country) {
...............
});
有没有办法找到distict值
答案 0 :(得分:22)
您可以使用Sequelize.fn
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) { })
答案 1 :(得分:6)
试试这个:https://github.com/sequelize/sequelize/issues/2996#issuecomment-141424712
Project.aggregate('country', 'DISTINCT', { plain: false })
.then(...)
答案 2 :(得分:2)
我最终使用了这样的分组方式:
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(...)
答案 3 :(得分:1)
您可以使用 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`;
答案 4 :(得分:0)
您可以使用原始查询来获取结果或 sequelize.fn()
。