关于分组查询,书上如是说:~~~~~~~~~~~~~~
书上说:“如果SELECT 后面是字段名列表,而这些字段名又不在聚合函数中,则应当在GROUP BY子句中列出所有这些字段名”
瞅这意思是如果select后面的字段名在聚合函数中,那么在group by子句中可以省略这些字段名。
那为什么:
输入如下代码(代码无误):
select programtime,MIN(programtime) from programinfo
group by programtype
显然,select 后面的字段programtime明明包含在了聚合函数MIN中了,为什么还出如下错误:
“选择列表中的列 'programinfo.programtime' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中”
------解决方案--------------------
你这么写肯定会报错的,书上的话写的不够准确。
应该是,如果一列不在group by,那么这一列只能在聚合函数中,而你的programtime列,不在group by中,虽然在聚合函数中,但是:
select
programtime,MIN(
programtime) from programinfo
group by programtype
紫色的在聚合函数中,而红色的还是不在聚合函数中啊,所以就报错了
------解决方案--------------------对于没被聚合函数处理的字段, group by 中有的 select后面必须有
比如 select a,b,c from T group by a,b,c
至于在聚合函数中的字段,group by 中是不用包含的
比如 select a,b,c,min(d),max(e) from T group by a,b,c