平时都是使用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要严谨呀。