如何在Isar中实现类似SQL的分组统计订单数并排序?
在Isar中实现按客户ID分组统计订单数量并取Top200
需求回顾
你需要实现类似以下SQL的功能:按客户ID分组统计订单数量,取数量最多的前200条并按数量降序排列:
SELECT TOP (200) Id, COUNT(*) AS Total FROM Orders GROUP BY Id ORDER BY Total DESC
Isar实现代码
你可以通过Isar的分组、聚合、排序和限制方法完成需求,完整代码如下:
final top200CustomerOrders = await _isarService.isar.orders .groupBy((order) => order.customerId) // 按客户ID分组 .aggregate((group) => group.count()) // 统计每组订单数量 .sortByCountDesc() // 按订单数量降序排列 .limit(200) // 取前200条数据 .findAll();
代码说明
groupBy((order) => order.customerId):指定以customerId作为分组字段aggregate((group) => group.count()):对每个分组内的订单进行计数,结果会包含customerId和对应的订单数量countsortByCountDesc():在数据库层面按计数结果降序排序,比内存排序更高效limit(200):限制返回结果数量为200条
内容的提问来源于stack exchange,提问作者Fuxster
相关产品推荐
相关产品推荐

