You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Supabase的SELECT语句中使用SUM()聚合函数?

在Supabase中使用SUM()聚合函数的正确姿势

嘿,刚上手Supabase的话,确实会疑惑聚合函数的写法——毕竟COUNT那个带count: 'exact'的配置有点特殊对吧?其实对于SUM这类聚合函数,Supabase的JS SDK是直接支持你在select()里写原生SQL风格的聚合表达式的,不需要额外的配置项,和你写的目标SQL逻辑完全对应。

针对你想要实现的查询,对应的Supabase代码应该是这样的:

const { data, error } = await supabase
  .from('GE_SELLS')
  .select(`
    GE_PRODUCTS,
    sum(GE_QUANTITY) as Quantity,
    sum(GE_SALEVALUE) as Revenue
  `)
  .eq('GE_ENTERPRISE', 'G.E.')
  .neq('DELETED', '*')
  .group('GE_PRODUCTS')
  .order('Revenue', { ascending: false })
  .limit(3);

// 别忘了处理错误和结果
if (error) {
  console.error('查询出错:', error);
} else {
  console.log('聚合结果:', data);
}

关键点说明:

  • 聚合函数直接写在select里:和原生SQL一样,你可以在select()的字符串中使用sum(字段名),并通过as给结果起别名,SDK会自动解析并执行这个聚合逻辑。
  • 条件过滤:用.eq().neq()替代SQL里的=<>,这是Supabase SDK提供的链式查询方法,更符合JS的写法习惯。
  • 分组与排序.group('GE_PRODUCTS')对应SQL的GROUP BY GE_PRODUCTS.order('Revenue', { ascending: false })对应ORDER BY Revenue DESC,通过ascending参数控制排序方向。
  • 限制条数.limit(3)就是SQL里的LIMIT 3

和COUNT的用法对比的话,COUNT那个特殊的{ count: 'exact' }配置是用来单独获取总条数的(比如不需要返回数据,只需要计数),而SUM这类聚合是和其他字段一起查询的,所以直接写在select语句里就可以了,逻辑和原生SQL完全一致,上手起来很直观。

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

火山引擎 最新活动