读书人

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

发布时间: 2014-01-05 18:22:56 作者: rapoo

关于分组查询,书上如是说:~~~~~~~~~~~~~~
书上说:“如果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

读书人网 >SQL Server

热点推荐