web-dev-qa-db-fra.com

Yii2 - obtenir la somme d'une colonne

J'ai trouvé cela dans le guide, mais je ne sais pas comment mettre en œuvre le même

yii\db\Query::count(); renvoie le résultat d'une requête COUNT. D'autres méthodes similaires incluent sum($q), average($q), max($q), min($q), qui prennent en charge la soi-disant requête de données agrégatives. Le paramètre $q Est obligatoire pour ces méthodes et peut être le nom ou l'expression de la colonne.

Disons par exemple que j'ai un nom de table "facturation" avec des colonnes:

name     amount
charge1  110.00
charge2  510.00
Total -  620.00

Comment j'implémente en utilisant

yii\db\Query::sum('amount');

J'ai aussi essayé comme

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

yii\db\Query::sum($command);

mais la page génère une erreur.

Merci.

9
Joshi

La première partie du code que vous avez essayé semble essayer d'utiliser Query Builder. Dans ce cas, vous devez créer une instance d'une requête, définir la table cible, puis calculer la somme:

Via Query Builder ( 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;

La deuxième partie du code que vous avez essayé semble essayer d'utiliser des objets d'accès aux données. Dans ce cas, vous pouvez écrire du SQL brut pour interroger la base de données, mais vous devez utiliser queryOne(), queryAll(), queryColumn() ou queryScalar() pour exécuter la requête. queryScalar() convient à une requête agrégée comme celle-ci.

Via des objets d'accès aux données ( 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;
20
Caleb

Dans un modèle, la somme peut également être récupérée avec:

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

j'espère que le nom de votre modèle est Billing

utilisation du modèle de facturation

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

dans d'autres modèles

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

Vous pouvez utiliser directement le concept de requête yii dans le modèle de recherche

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

OR

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

En dehors du modèle (la facturation est le nom du modèle)

Billing::find()->where(['column'=>value])->sum('amount');
6
Dheeraj singh