我从 Supabase 开始,想了解如何在
SUM()
中传递 SELECT
聚合器。
我注意到对于
COUNT
,我们使用:
const { data, error, range, count } = supabase
.from('table')
.select('*', { count: 'exact' })
还有什么类似
SUM
我没注意到的吗?
我的查询是这样的:
select
"GE_PRODUCTS",
sum("GE_QUANTITY") as Quantity,
sum("GE_SALEVALUE") as Revenue
from "GE_SELLS"
where "GE_ENTERPRISE" = 'G.E.'
and "DELETED" <> '*'
group by "GE_PRODUCTS"
order by Revenue desc
limit 3;
您最好的选择是将其放入 PostgreSQL 函数中并使用 .rpc()
从 Supabase
调用它:
CREATE OR REPLACE FUNCTION get_my_sums()
RETURNS TABLE (
"GE_PRODUCTS" TEXT,
Quantity NUMBER,
Revenue NUMBER
) AS $$
DECLARE
var_r record;
BEGIN
RETURN QUERY
select
"GE_PRODUCTS",
sum("GE_QUANTITY") as Quantity,
sum("GE_SALEVALUE") as Revenue
from "GE_SELLS"
where "GE_ENTERPRISE" = 'G.E.'
and "DELETED" <> '*'
group by "GE_PRODUCTS"
order by Revenue desc
limit 3;
END; $$
LANGUAGE 'plpgsql';
PostgREST v12 现在支持 Supabase Javascript SDK 的聚合函数:
const { data, error, range, count } = supabase
.from('GE_SELLS')
.select(
'GE_PRODUCTS, GE_QUANTITY.sum(), GE_SALEVALUE.sum()',
{ count: 'exact' }
)
.eq('GE_ENTERPRISE', 'G.E.')
.not('DELETED', 'eq', '*')
.group('GE_PRODUCTS')
.order('Revenue', { ascending: false })
.limit(3)