sql - Group by/Distinct Sequelize 查询功能

标签 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

对此的 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 函数 ( attributes: ) 直接在 sequelize.fn() 字段中处理聚合函数。

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')
     };
   });
});

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

此外,如果您想从模型中使用它,则必须添加别名 min_price。 (即 listing_inst.get('min_price') )。

这是文档的链接:http://sequelize.readthedocs.org/en/latest/docs/querying/#attributes

不幸的是,您真的不能在没有原始查询的情况下直接(未嵌套)返回具有两个表中字段的对象。但是,您可以在 then() 中将它们压缩在一起

关于sql - Group by/Distinct Sequelize 查询功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35878216/

相关文章:

javascript - Hasura Graphql 查询运算符的神秘定义

postgresql - 为 DISTINCT 调用创建 PostgreSQL 类型(点)的自定义 "equality operator"

php - 仅打印一个订单号以及与该号码相关的商品

sql - 检测 SQL 方言

mysql - 如何从表中获取 count_id 和 rating_evarate?

php - 使用 join 列出 mysql 中的结果

MySQL 5.5 SELECT DISTINCT - 如何返回多个没有查询重复的列?

sql - 更新两个表?

java - 使用 ORMLite 保存 PostgreSQL 自定义枚举数据类型

postgresql - @Tailable(spring-data-reactive-mongodb) 相当于 spring-data-r2dbc