Yii2-получение суммы столбца

Я нашел это в руководстве, но понятия не имею, как реализовать то же самое

yiidbQuery::count(); возвращает результат запроса COUNT. Другой подобные методы включают sum($q), average($q), max($q), min($q), которым поддержка так называемого запроса агрегированных данных. $q параметр является обязательным для этих методов и может быть либо имя столбца или выражение.

скажем, например, у меня есть имя таблицы "биллинг" со столбцами:

name     amount
charge1  110.00
charge2  510.00
Total -  620.00

как я реализую используя

yiidbQuery::sum('amount');

Я также пробовал, как

$command = Yii::$app->db->createCommand("SELECT sum(amount) FROM billing");

yiidbQuery::sum($command);

но страница выдает ошибку.

спасибо.

4 ответов


первая часть кода, который вы пытались, похоже, пытается использовать построитель запросов. В этом случае необходимо создать экземпляр запроса, задать целевую таблицу и вычислить сумму:

Через Построитель Запросов (http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html):

$query = (new \yii\db\Query())->from('billing');
$sum = $query->sum('amount');
echo $sum;

вторая часть кода, которую вы пытались, похоже, пытается использовать объекты доступа к данным. В этом случае можно написать raw SQL для запроса база данных, но должна использовать queryOne(), queryAll(), queryColumn() или queryScalar() для выполнения запроса. queryScalar() подходит для агрегированного запроса, такого как этот.

Через Объекты Доступа К Данным (http://www.yiiframework.com/doc-2.0/guide-db-dao.html):

$command = Yii::$app->db->createCommand("SELECT sum(amount) FROM billing");
$sum = $command->queryScalar();
echo $sum;

в модели сумма также может быть получена с помощью:

$this->find()->where(...)->sum('column');

Я надеюсь, что ваша модель Имя Биллинг

внутри биллинговой модели используйте

$this->find()->sum('amount');

в других моделях

Billing::find()->sum('amount');

Yu может напрямую использовать концепцию запроса yii в модели поиска

$this->find()->from('billing')->where(['column'=>value])->sum('amount');