SQL转TypeORM Query Builder 多参数groupBy传参问题咨询
TypeORM 多字段GROUP BY查询实现方案
你需要实现的SQL语句可以通过链式调用addGroupBy方法实现多字段分组,完整实现代码如下:
import { getRepository } from 'typeorm'; import { Order } from './your-entity-path/Order.entity'; // 替换为你自己的Order实体路径 const orderGroupResult = await getRepository(Order) .createQueryBuilder('orders') // 对应SELECT部分 .select('DATE(orders.OrderDate)', 'date') .addSelect('COUNT(orders.OrderId)', 'orderCount') .addSelect('orders.ShipperID', 'shipperID') // 对应GROUP BY部分 .groupBy('DATE(orders.OrderDate)') .addGroupBy('orders.ShipperID') // 追加第二个分组字段,更多字段可继续调用addGroupBy // 对应ORDER BY部分 .orderBy('DATE(orders.OrderDate)', 'DESC') // 拿到原始查询结果 .getRawMany();
注意事项
- TypeORM的
groupBy方法仅支持设置首个分组条件,后续所有额外分组条件都需要调用addGroupBy方法追加 - 上述代码中的日期函数
DATE()适配MySQL,如果使用PostgreSQL可替换为DATE_TRUNC('day', orders.OrderDate),SQL Server可直接使用CAST(orders.OrderDate AS DATE) - 如果使用TypeORM 0.3+版本,可将
getRepository替换为dataSource.getRepository或者使用注入的Repository实例调用查询构造器
内容的提问来源于stack exchange,提问作者Kusal Backup
相关产品推荐
相关产品推荐

