Sql 分组依据/具有不同功能的Sequelize查询

Sql 分组依据/具有不同功能的Sequelize查询,sql,postgresql,distinct,sequelize.js,Sql,Postgresql,Distinct,Sequelize.js,我需要为表中每个名称明确的项获取最低值。例如,对于下表: books id| name 1 | math 2 | chem 3 | chem 4 | chem 5 | math listings id|bookID|price 1 | 1 | 4.35 2 | 2 | 2.54 3 | 3 | 1.57 4 | 4 | 4.91 5 | 5 | 7.22 我的查询结果应返回: name | price math | 4.35 chem | 1.57 对此的SQ

我需要为表中每个名称明确的项获取最低值。例如,对于下表:

books
id| name
1 | math
2 | chem
3 | chem
4 | chem
5 | math

listings
id|bookID|price
1 |   1  | 4.35
2 |   2  | 2.54
3 |   3  | 1.57
4 |   4  | 4.91
5 |   5  | 7.22
我的查询结果应返回:

name | price
math | 4.35
chem | 1.57
对此的SQL查询将是

SELECT b.name, MIN(l.price)
FROM Book b, Listing l 
WHERE b.id = l.bookId 
GROUP BY b.name;
我在尝试创建一个与此相同的sequelize查询时遇到问题。。。到目前为止,我已经做到了:

models.Listing.aggregate('book.name', 'models.Listing.min(price)', {
  distinct: true,
  include: [
    { model: models.Book, as: 'book' }
  ]
}

使用Sequelize函数(
Sequelize.fn()
)在
属性:
字段中直接处理聚合函数

使用
sequelize.col
而不是字段名字符串可以确保sequelize知道您引用的是列,而不是传入的值

此外,如果要从模型中使用别名,则必须添加别名
minu price
。(即,
清单说明获取(“最低价格”)

以下是指向文档的链接:


不幸的是,如果没有原始查询,就不能直接返回一个包含两个表中的字段(未列出)的对象。但是,你可以在
then()

中将它们挤在一起,当你这样做时会发生什么?这会导致404,但实际上它只是被扔在一起。。。我还不太了解如何在sequelized中构造查询。
models.Book.findAll({
  attributes: ['name'],
  include: [ {
     model: models.Listing,
     attributes: [[sequelize.fn('MIN', sequelize.col('price'), 'min_price']]
  } ]
})
.then(function (results) {
   return results.map(function (book) {
     return {
       name: book.name,
       price: book.listing.get('min_price')
     };
   });
});