簡體   English   中英

如何用join計算mysql?

[英]How to count mysql with join?

我正在使用laravel開發銷售儀表板,需要計算每天的銷售數量。 我有兩個表,產品和交易。 在產品中,我擁有所有產品,在交易中,我擁有所有銷售交易

有了這個查詢,我可以按product_name獲得銷售組的編號。

$dash = Transactions::select(DB::raw('`product_name` AS ProductName, COUNT(`cod_sale`) as `TotalSale`'))
        ->where('status_sale', '=', 'Finished')
        ->where('date_finished', '>=', $data)
        ->groupBy('product_name')
        ->get();

此查詢返回

[
  {
    "ProductName": "Product A",
    "TotalSale": 15
  },
  {
    "ProductName": "Product B",
    "TotalSale": 2
  },
  {
    "ProductName": "Product C",
    "TotalSale": 1
  },
  {
    "ProductName": "Product D",
    "TotalSale": 9
  }
]

如何退還未售出的產品以顯示零? 請記住,表中的交易只是銷售的產品,表中的產品是所有產品

我想這樣返回:

[
  {
    "ProductName": "Product A",
    "TotalSale": 15
  },
  {
    "ProductName": "Product B",
    "TotalSale": 2
  },
  {
    "ProductName": "Product C",
    "TotalSale": 1
  },
  {
    "ProductName": "Product D",
    "TotalSale": 9
  },
  {
    "ProductName": "Product E",
    "TotalSale": 0
  },
  {
    "ProductName": "Product F",
    "TotalSale": 0
  }

使用LEFT JOIN

Product::leftJoin('transactions', function($join) use($date) {
        $join->on('products.id', '=', 'transactions.product_id')
            ->where('status_sale', 'Finished')
            ->where('date_finished', '>=', $date);
    })
    ->groupBy('products.id')
    ->get([
        'products.name as ProductName',
        DB::raw('count(transactions.id) TotalSale')
    ]);

使用此代碼可能會幫助您

$dash = Transactions::select(DB::raw('`product_name` AS ProductName, COUNT(`cod_sale`) as `TotalSale`'))
    ->where('status_sale', '=', 'Finished')
    ->where('date_finished', '>=', $data)
    ->where(DB::raw('COUNT(`cod_sale`)' '>', 0)
    ->groupBy('product_name')
    ->get();

不幸的是,我無法提供任何提示,最終我學習了其他東西,這很有用! 但是我決定讓系統每天在表中插入所有銷售數量為0的產品,並將計數功能更改為SUM,因此它增加了某個產品的銷售量,而不增加行數。桌子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM