You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Prisma Client计算两年用电量差值并获取排序前10项?

解决方案

你可以在获取到两年的统计数据后,通过JavaScript的数组和对象操作完成匹配、差值计算、排序和筛选,具体实现如下:

1. 转换统计数据为便于查找的结构

把2021年的统计结果转换成以apartment_id为键的映射,快速通过公寓ID定位对应用电量总和:

// 用Map存储2021年各公寓的用电量总和,处理_sum为null的情况
const consumption2021Map = new Map(
  consumption2021.map(item => [
    item.apartment_id,
    item._sum.consumption || 0
  ])
);

2. 计算差值并筛选排序

遍历2022年的统计数据,匹配对应公寓的2021年数据,计算差值后排序取前10:

const consumptionDiff = consumption2022
  .map(item => {
    const year2021Sum = consumption2021Map.get(item.apartment_id) || 0;
    const year2022Sum = item._sum.consumption || 0;
    
    return {
      apartment_id: item.apartment_id,
      2021_consumption: year2021Sum,
      2022_consumption: year2022Sum,
      difference: year2022Sum - year2021Sum // 2022相对2021的用电量差值
    };
  })
  // 过滤掉两年都无有效数据的项(可选)
  .filter(item => item.2021_consumption > 0 || item.2022_consumption > 0)
  // 按差值降序排序(差值大的在前),升序则改为a.difference - b.difference
  .sort((a, b) => b.difference - a.difference)
  // 取排序后的前10项
  .slice(0, 10);

额外说明

  • 空值处理:如果某公寓在对应年份无符合条件的记录,_sum.consumption会返回null,用|| 0转为0避免计算报错。
  • 排序调整:若需要按差值绝对值排序,可将排序逻辑改为Math.abs(b.difference) - Math.abs(a.difference)。

内容的提问来源于stack exchange,提问作者daeb2a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 23:11:26