Yii2 \yii\db\Query()中的数学

Yii2 \yii\db\Query()中的数学,yii2,yii2-basic-app,Yii2,Yii2 Basic App,我想做一些数学运算(除法、减法、加法…),两个或更多字段的值使用一个Yii数据库查询,如下所示。我可以这样做吗 $data = (new \yii\db\Query()) ->select([ 'date', 'SUM( IF(status = "Passed", 1, 0) ) AS passed', 'SUM( IF(status = "Failed", 1, 0) ) AS failed', 'SUM( IF(status = "On Hold", 1, 0) )

我想做一些数学运算(除法、减法、加法…),两个或更多字段的值使用一个Yii数据库查询,如下所示。我可以这样做吗

 $data = (new \yii\db\Query())
 ->select([
  'date',
  'SUM( IF(status = "Passed", 1, 0) ) AS passed',
  'SUM( IF(status = "Failed", 1, 0) ) AS failed',
  'SUM( IF(status = "On Hold", 1, 0) ) AS onhold',
  'passed/onhold as selfsubmit',
  'COUNT(*) AS total'
 ])
 ->from('qa3d')
 ->groupBy('date')
 ->all();

首先,不能在MySQL的同一查询中使用别名进行算术(math)。那也是

但是您可以使用
yii\db\Expression
类进行计算,因为这样,框架就不会试图将表达式转义为MySQL列

因此,基本上您必须选择不带别名的表达式和
expression

例如:

$data=(新建\yii\db\Query())
->挑选([
“日期”,
'已通过的总和(如果(status=“Passed”,1,0)',
“总和(如果(status=“Failed”,1,0))为失败”,
'如果(status=“On Hold”,1,0))为On Hold'的总和,
新的\yii\db\Expression('SUM(IF(status=“Passed”,1,0))/SUM(IF(status=“On Hold”,1,0))作为selfsubmit'),
'将(*)计为总计'
])
->from('qa3d')
->分组人(“日期”)
->全部();