orc 数据查询求详细解释一下下面的有count(1) rn那部分的意思

select t.id,t.org_name, t.dept_name, t.emp_no, t.name, t.sex, nvl(sum(t.consult), 0) consult, nvl(sum(t.reply), 0) reply from
(
select d.id, d.org_name, d.dept_name, d.emp_no, d.name, (case when d.sex = '1' then '男' else '女' end) sex,
c1.rn consult, c2.rn reply from jkmh_webcms.TB_DOCTOR_USERS d
left join ( select doctorid , isproblem,count(1) rn from jkmh_webcms.tcm_consult group by doctorid, isproblem) c1
on d.id = c1.doctorid and c1.isproblem ='0'
left join ( select doctorid, isproblem, count(1) rn from jkmh_webcms.tcm_consult group by doctorid, isproblem) c2
on d.id = c2.doctorid and c2.isproblem = '2'
)t group by t.id, t.org_name, t.dept_name, t.emp_no, t.name, t.sex

count函数表示统计列数,

count(1)中1就代表你这个查询的表里的第一个字段
这里用1,也是为了方便,当然如果数据量较大的话,也可以提高速度,因为写count(*)的话会所有列扫描,这里用1的话或者用字段名的话,只扫描你写的那个列

rn 代表count统计结果的列别名

 意思是按照后面的goup by 得出来的数据条数,假如按照group by doctorid, isproblem得出来的结果 doctorid, isproblem
 分别相同的有两条,则count(1)这一列的值为2

count(1) rn 表示将表jkmh_webcms.tcm_consult中的值按照doctorid, isproblem进行分组,分组后各组的统计值count(1),并将该统计值重命名为rn

MySQL如何优化GROUP BY http://www.data.5helpyou.com/article237.html