Опция 'db_agg'

Опция db_agg используется для вычисления значений, общих для ВСЕЙ выборки, а не только для текущей страницы.
Наиболее частые примеры: вычисление суммы, максимального, минимального, среднего значения.

db_agg принимает строку с названием стандартных aggregate функций.
В также можете указать любую нестандартную aggregate функцию, передав её синтаксис напрямую, как это делается в опции db. Это особенно полезно для PostgreSQL.

Все варианты использования db_agg:

$this->query = "SELECT {fields} FROM tbl_order o, tbl_customer c WHERE c.id=o.customer_id AND {where}";
 
$this->cols = array(
	"id"          => array("label"  => "ID",
                               "db"     => "o.id",
                               "db_agg" => "max",
			       ...
			       ),
 
	"first_name"  => array("label"  => "First name", 
			       "db"     => "c.first_name",
                               "db_agg" => "string_agg(c.first_name, ',')", //custom aggregate (PostgreSQL)
			       ...
				),
 
	"discount"    => array("label" => "Discount",
			       "db"    => "o.discount * 100",
                               "db_agg"=> "avg"
			       ...
			       ),
);

Запрос AGG

SELECT 
 
    COUNT(*) AS _count
   ,MAX(o.id) AS id
   ,string_agg(c.first_name, ',') AS first_name
   ,avg(o.discount * 100) AS discount
 
FROM tbl_order o, tbl_customer c WHERE c.id=o.customer_id AND TRUE

Данные:

array(
    '_count'      => 6,
    'id'          => 24,
    'first_name'  => "John,James,Kate,Bill,Shaun,Cloud",
    'discount'    => 0.07
)

Данные будут доступны на сервере внутри переменной $this→agg, на клиенте в объекте userdata.agg


На других языках