1 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
我想您可以使用聯(lián)接查詢直接從數(shù)據(jù)庫獲取排名前 10 的企業(yè)和排名最低的 10 家企業(yè),而不是循環(huán)所有企業(yè)記錄并手動(dòng)計(jì)算其收入
對(duì)于排名前 10 的業(yè)務(wù),您可以對(duì)其余相關(guān)表使用內(nèi)部聯(lián)接
$topBusinesses = DB::query()
->select('b.id', 'b.display_name', DB::raw('sum(p.amount_paid) as revenue')
->from('business as b')
->join('service as s', 'b.id', '=', 's.business_id')
->join('invoice as i', 's.id', '=', 'i.product_code_id')
->join('payment_transaction as p', function ($join) {
$join->on('p.id', '=', 'i.payment_transaction')
->where('p.amount_paid', '>', 0);
})
->groupBy('b.id', 'b.display_name')
->orderByDesc('revenue')
->limit(10)
->get();
對(duì)于最低 10 個(gè)業(yè)務(wù),請(qǐng)使用發(fā)票和 payment_transaction 的左聯(lián)接,這樣,如果這些表中沒有某個(gè)業(yè)務(wù)的記錄,您仍然可以獲得這些業(yè)務(wù)記錄
$lowestBusinesses = DB::query()
->select('b.id', 'b.display_name', DB::raw('coalesce(sum(p.amount_paid),0) as revenue')
->from('business as b')
->join('service as s', 'b.id', '=', 's.business_id')
->leftJoin('invoice as i', 's.id', '=', 'i.product_code_id')
->leftJoin('payment_transaction as p', function ($join) {
$join->on('p.id', '=', 'i.payment_transaction')
->where('p.amount_paid', '>', 0);
})
->groupBy('b.id', 'b.display_name')
->orderBy('revenue')
->limit(10)
->get();
我使用 MySQL合并函數(shù)在返回 null 的情況下顯示 0 值sum(),如果您使用任何其他數(shù)據(jù)庫,您可以使用備用函數(shù)。
- 1 回答
- 0 關(guān)注
- 165 瀏覽
添加回答
舉報(bào)