有此题测试可知,select至少会先创建表头,不是简单意义上理解的select在order by(以及group by)后面运行,也就是说group by,order by可以根据select已经选好的表头运行。
下面两段代码均不会报错。
select a.dept_no, d.dept_name, a.title, count(t.title) as count
from
(select de.dept_no, t.title
from dept_emp de
inner join titles t
on de.emp_no=t.emp_no
where de.to_date='9999-01-01'
and t.to_date='9999-01-01')a
inner join departments d
on a.dept_no=d.dept_no
group by a.dept_no, d.dept_name, a.title
order by a.dept_no, a.title
select a.dept_no, d.dept_name, a.title, count(title) as count
from
(select de.dept_no, t.title
from dept_emp de
inner join titles t
on de.emp_no=t.emp_no
where de.to_date='9999-01-01'
and t.to_date='9999-01-01')a
inner join departments d
on a.dept_no=d.dept_no
group by dept_no, dept_name, title
order by dept_no, title
下面代码测试得出:select的字段(d.dept_name)不经过group by 排序也没报错,可能是以为a.dept_no和d.dept_name是一一对应的吧?
select a.dept_no, d.dept_name, a.title, count(title) as count
from
(select de.dept_no, t.title
from dept_emp de
inner join titles t
on de.emp_no=t.emp_no
where de.to_date='9999-01-01'
and t.to_date='9999-01-01')a
inner join departments d
on a.dept_no=d.dept_no
group by dept_no, title
order by dept_no, title
补充一下别人的笔记
用了GROUP BY语句和聚合函数COUNT()。GROUP BY de.dept_no, t.title说明这两个字段都一样的记录才分到一组,而COUNT(t.title)其实是统计记录数,换成COUNT(*)也是一样的,用COUNT(t.title)是为了突出重点。聚合函数是多输入单输出的函数,类似的还有MAX()、MIN()、SUM(),所以出现了原来两条记录,输出只有一条记录的情况