如何在Yii2中的同一查询中获取不同列的总和

时间:2019-05-21 13:59:34

标签: php mysql yii2

我已经实现了mysql查询并且运行良好,但是在Yii2中转换/实现它时,我在活动记录方面遇到了一些困难。

SELECT 
COUNT(price) AS total,
SUM(IF(is_veg = 'Y', 1, 0)) AS veg_count,
SUM(IF(is_not_veg = 'Y', 1, 0)) AS non_veg_count
FROM order_table

我尝试按照

进行操作
orderTable::find()
  ->select('count(price) as total')
  ->sum(new Expression("IF(is_veg = 'Y', 1, 0)") => 'veg_count')
  ->sum(new Expression("IF(is_not_veg = 'Y', 1, 0)") => 'non_veg_count');

我遇到以下错误: 语法错误,意外的'=>'(T_DOUBLE_ARROW),预期为','或')'

1 个答案:

答案 0 :(得分:1)

您可以尝试通过数组中的列使用简单的选择
(并注意正确的引号顺序)

orderTable::find()
  ->select(['count(price) as total', 
    "SUM(IF(is_veg = 'Y', 1, 0)) AS veg_count",
     "SUM(IF(is_not_veg = 'Y', 1, 0)) AS non_veg_count"])

但是请确保您具有对应的公共var列别名,否则结果模型将不包含结果

您需要的OrderTable模型中

class OrderTable extends \yii\db\ActiveRecord
{

  public $veg_count;  
  public $non_veg_count;       
  ...