如何优雅地使用分页并且合计某字段值?


我想实现全部合计,难道必须分两次sql来查吗?

我的方案一:
分两次sql来查询,一个正常用分页,一个用sum,但是这样影响效率。

方案二:

find(),查询全部数据,然后用java的stream()来进行合计,进行分页。(未实现)而且sql这样查也可能有点慢吧?

方案三:

用with cacheFind as(

select * from warehouse_bill

)

select a,b,c,price,sum(price) as totalPrice from cacheFind

union -- 用union来合并起来,然后分页的时候,前端传的10,默认+1,这个思路对吗?

select a,b,c,price,0 as totalPrice from cacheFind 

能说说您们的方案吗?

请问大佬们有没有其他更好的思路?

public void findWarehouseBill(){
    renderJson(warehouseBillDao.paginate(1,getPara("count") + 1,"select * ","From warehouse_bill"));
}

image.png

评论区

北流家园网

2023-02-05 10:35

这个由前端控件来完成吧

fmpoffice

2023-02-05 12:27

@北流家园网 全部数据的话,前端没这个数据,合计不出来吧。我是想后端数据,进行sum相关字段

杜福忠

2023-02-06 09:41

看表里数据量,数据少如1~2K,个人感觉可以一下查出再Java计算问题不大。
数据量多了肯定不行,还是得多次查询,业务总耗时是低的

bool123

2023-02-06 10:27

方案一和三性能上差不太多。如果数据量变更不频繁,还可以考虑把sum(price)缓存起来

fmpoffice

2023-02-06 12:24

@bool123 好的,谢谢

fmpoffice

2023-02-06 12:25

@杜福忠 是的,没办法,还是分拆出来查两次才行,没办法

l745230

2023-02-08 14:41

一般来说 全部合计,只能后端给了, 本页合计,让前端自己去折腾.

热门反馈

扫码入社