【发布时间】:2016-09-28 10:46:53
【问题描述】:
我有一个查询,目前看起来像这样(简化)
SELECT
m.academicyr,
m.ncyeargrp_format AS YEAR,
Count(*) AS cohort,
round (Avg (m.per_att),4) AS attendance,
Round (per_cohort,4)
FROM
(
SELECT
s.academy,
s.academicyr,
s.adno,
s.ncyeargrp_format,
CASE WHEN a.possible_att_marks = 0 THEN NULL
ELSE (a.present_att_marks / a.possible_att_marks)
END
AS per_att,
a.possible_att_marks,
a.present_att_marks,
a.period,
Count (*) AS cohort,
Count (*) / Sum(Count(*)) AS per_cohort
FROM
VACADEMY_STU_all s
LEFT JOIN
vacademy_attendance a
ON s.academy = a.academy
AND s.adno = a.adno
AND s.term = a.period
AND s.academicyr = a.academicyr
WHERE
s.academy = 'CAN'
AND s.academicyr = '1617'
AND a.period = '1'
GROUP BY
s.academy,
s.academicyr,
s.adno,
s.ncyeargrp_format,
a.possible_att_marks,
a.present_att_marks,
a.period
) m
GROUP BY
m.academicyr,
m.ncyeargrp_format,
m.per_cohort
ORDER BY
To_Number(Trim(regexp_replace(m.ncyeargrp_format, '[A-Za-z]')))
我在这里尝试将计数*除以计数*的总和。我收到一个错误“不是单个组函数”。
在第一个选择中没有“Round (Per_cohort,4)”的情况下,查询工作得非常好,并且还从内部选择和分组依据中删除。
我期待的结果是
年组 % 的 Cohort Ave Att 第 7 年 126 18.18% 98.10% 第 8 年 139 20.06% 93.88% 第 9 年 143 20.63% 90.56% 10 年 143 20.63% 95.94% 11 年 142 20.49% 88.45% 总计 693 100.00% 93.28%
我的所有其他列都运行良好,我只需要对同期群进行百分比计算,因此同期群列中的值除以已使用 count * 创建的同期群列的总数。
非常感谢任何帮助。
谢谢
【问题讨论】:
-
抱歉格式化,我不知道如何更改它。
-
编辑时标记代码并点击
{}。 -
您只需要在选择列表中按您想要的相同值进行分组;因此,如果您需要提取舍入值,请按舍入值分组
-
在您的外部选择中将 Round (per_cohort,4) 更改为 Round (sum(per_cohort),4)。
-
您没有对这种情况进行分组
标签: sql oracle count sum divide