在我的视图中有一个名为birth\u date的列。我想用这一栏和今天的日期来计算年龄,并计算年龄段中的员工人数。例如:40至49岁的员工等。
在纯sql语句中的其他答案也很受欢迎。
我的代码如下:
$count = StaffEmploymentListView::find()
->select([
'COUNT(*) AS TEACHING_COUNT',
'BIRTH_DATE' => 'BIRTH_DATE'
])
->where(['GENDER' => 'MALE', 'JOB_CADRE' => 'ACADEMIC'])
->andFilterHaving(['>=', "TRUNC(months_between(sysdate, BIRTH_DATE) / 12)", 40])
->andFilterHaving(['<', "TRUNC(months_between(sysdate, BIRTH_DATE) / 12)", 70])
->groupBy(['BIRTH_DATE'])
->all();
我计算的年龄如下所示:
TRUNC(months_between(sysdate, BIRTH_DATE) / 12)
完成此操作后,如果尝试访问模型中的教学计数变量,则该变量为空。
2条答案
按热度按时间py49o6xq1#
您可以计算年龄段之间的记录数,而无需编写任何代码
SQL
也。既然您已经在使用yii,那么直接使用它的方法似乎是有意义的。在本例中是count()方法。
bsxbgnwa2#
我将用sql示例来回答。我不知道上面的代码在php中是如何工作的,但是由于按“出生日期”分组,每个年龄段会有多行,返回时可能会出现问题。
如果我知道您需要的是sum over count(*),但是如果查询没有在任何地方重复使用,并且您不需要count per birth\u date,那么您可以从查询构造中删除group by。
见下文,