mssql错误Error8120:分组必须只能查询分组字段和其他字段的聚合

平时都是使用myssql的我,最近不得不开始学习mssql了。

在mysql下:

select author, Datepart(hour, created) as hh from comments 
where created>='2017-08-01 0:00:00' 
and title like "穿越诗歌"
and permlink not like 're-%'
group by Datepart(hour, created)

这是一点问题也没有的。可是在mssql下,系统提示:

Error 8120: Column 'author' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

虽然我的英语不咋的,但是计算英语还是能看懂大概的。这句的意思是:author这个字段在查询中无效,因为它既不用于聚合函数,也不属于组子句的字段。

我蒙了呀,难道我如果查询10个字段,都要按照分个组吗?

后来我冷静的思考了一下。分组以后,每组的author值有很多,那么这句话应该查出来一个哪一条记录了。所以要用count max min等聚合函数聚合一下才行。

在mysql中,分组以后如果没有指定,就会自动把第一条记录的author值查询出来。

事实上呢,这个含有穿越诗歌的文章都是同一个作者写的,选哪一条记录都一样。

可以看出,mssql很严谨,在语法上就不通过了,这样的句子是不能执行的。 mssql的确实是比mysql要严谨呀。

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now