工作中遇到的sql查询有关问题,求大神帮个忙,多谢您
工作中遇到的sql查询问题,求大神帮个忙,谢谢您
记录表:
id
AP_APPLYGRADE --年级 (对应tag_id)
ap_reason --申请理由(对应ar_code)
理由表:
ar_code --id
ar_name --申请理由
年级表:
tag_id --年级ID
tag_name --年级名称
现在要查询记录表中 每一个年级 的 每一个申请理由 有多少行数据 并且按照每一个年级来一个小计 所有年级 来个总和
想了很久没想出来,大神救救我
------解决思路----------------------
楼主解决没?发完帖子就没下文了,给你写下吧
------解决思路----------------------
select max(b.tag_name),max(c.ar_name),count(*) from 记录表 a,年级表 b,理由表 c
where a.AP_APPLYGRADE=b.tag_id and a.ap_reason=c.ar_code
group by rollup(a.AP_APPLYGRADE,a.ap_reason);
group by后带rollup子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。
group by后带rollup子句所返回的结果集,可以理解为各个分组所产生的结果集的并集且没有去掉重复数据 。
另:group by后带rollup子句与group by后带cube子句的唯一区别就是:带cube子句的group by会产生更多的分组统计数据。cube后的列有多少种组合(注意组合是与顺序无关的)就会有多少种分组。
记录表:
id
AP_APPLYGRADE --年级 (对应tag_id)
ap_reason --申请理由(对应ar_code)
理由表:
ar_code --id
ar_name --申请理由
年级表:
tag_id --年级ID
tag_name --年级名称
现在要查询记录表中 每一个年级 的 每一个申请理由 有多少行数据 并且按照每一个年级来一个小计 所有年级 来个总和
想了很久没想出来,大神救救我
------解决思路----------------------
楼主解决没?发完帖子就没下文了,给你写下吧
select max(b.tag_name),max(c.ar_name),count(*)
from 记录表 a,年级表 b,理由表 c
where a.AP_APPLYGRADE=b.tag_id
and a.ap_reason=c.ar_code
group by rollup(a.AP_APPLYGRADE,a.ap_reason);
------解决思路----------------------
select max(b.tag_name),max(c.ar_name),count(*) from 记录表 a,年级表 b,理由表 c
where a.AP_APPLYGRADE=b.tag_id and a.ap_reason=c.ar_code
group by rollup(a.AP_APPLYGRADE,a.ap_reason);
group by后带rollup子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。
group by后带rollup子句所返回的结果集,可以理解为各个分组所产生的结果集的并集且没有去掉重复数据 。
另:group by后带rollup子句与group by后带cube子句的唯一区别就是:带cube子句的group by会产生更多的分组统计数据。cube后的列有多少种组合(注意组合是与顺序无关的)就会有多少种分组。