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()->sum('amount');
в других моделях
Billing::find()->sum('amount');
Yu может напрямую использовать концепцию запроса yii в модели поиска
$this->find()->from('billing')->where(['column'=>value])->sum('amount');