Search code examples
mysqllaravellaravel-5.3

query: fetch 3 records which has higher value


I want to fetch 3 symbol_id which has higher buy_rate value

finaltrades table structure:

id   user_id   exchange_id   market_id   symbol_id      buy_datetime          sell_datetime      buy_rate   sell_rate   quantities  
 ---- --------- ------------- ----------- ----------- --------------------- --------------------- ---------- ----------- ------------ 
   1         1             1           1          96   2018-05-25 18:13:26   0000-00-00 00:00:00       2205           0          100  
   2         1             1           1          96   0000-00-00 00:00:00   2018-05-25 18:13:59       500        6680          100  
   3         4             1           1          23   2018-05-25 18:16:27   0000-00-00 00:00:00        120           0           10  
   4         1             1           1          96   2018-05-25 18:13:59   0000-00-00 00:00:00      50351           0           30  
   5         1             1           1          15   0000-00-00 00:00:00   2018-05-25 18:34:46       750         100          150  
   6         4             1           1         573   2018-05-26 09:29:17   2018-05-27 03:10:09       107          10           10  
   7         1             1           1          15   2018-05-11 09:30:54   2018-05-25 18:34:56         40         100           40

here is what I came up with so far:

public function HigherValue(){
            
            $higher_value = DB::table('finaltrade')
                          ->select 'buy_rate'> (select 'buy_rate')
                          ->get();
                         
             return response()->json($higher_value);
             }

Solution

  • If you want the three distinct symbol_id having the highest buy rate then you may try the following:

    public function HigherValue() {
        $higher_value = DB::table('finaltrade')
            ->select('symbol_id')
            ->groupBy('symbol_id')
            ->orderByRaw('MAX(buy_rate) DESC')
            ->limit(3)
            ->get();
    
        return response()->json($higher_value);
    }
    

    This would correpsond to the following raw MySQL query:

    SELECT symbol_id
    FROM finaltrade
    GROUP BY symbol_id
    ORDER BY MAX(buy_rate) DESC
    LIMIT 3;