首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于分组查询,书上如是说:该怎么解决

2014-01-05 
关于分组查询,书上如是说:~~~~~~~~~~~~~~书上说:“如果SELECT后面是字段名列表,而这些字段名又不在聚合函数

关于分组查询,书上如是说:~~~~~~~~~~~~~~
书上说:“如果SELECT  后面是字段名列表,而这些字段名又不在聚合函数中,则应当在GROUP BY子句中列出所有这些字段名”

瞅这意思是如果select后面的字段名在聚合函数中,那么在group by子句中可以省略这些字段名。
那为什么:
输入如下代码(代码无误):
select programtime,MIN(programtime) from programinfo
group by programtype

显然,select 后面的字段programtime明明包含在了聚合函数MIN中了,为什么还出如下错误:
“选择列表中的列 'programinfo.programtime' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中”
[解决办法]

引用:
Quote: 引用:

其实更准确的说,这个字段本身如果不在group by中,那么这个字段只能 在聚合函数中。

书上说的,不够准确把。

显然上面的例子,programtime没有在group by,那么只能在min函数中:MIN(programtime) 

就是呀,我把programtime放在了min函数中了,为什么还是错误?


你这么写肯定会报错的,书上的话写的不够准确。

应该是,如果一列不在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

热点排行