公司做政府项目,啥子数据库都用。sql server,db2,mysql,oracle。 进入正题 使用group by 分组。 sql server数据库实操
sql server.png 这儿的错误提示异常非常明显,就是说select后面除了聚合函数包裹的列以外,其余列必须出现在了gruop by之后方可被select 正确的实例如下
sql server correct.png db2数据库实操
db2.png An expression starting with "ID" specified in a SELECT clause, HAVING clause, or ORDER BY clause is not specified in the GROUP BY clause or it is in a SELECT clause, HAVING clause, or ORDER BY clause with a column function and no GROUP BY clause is specified.. SQLCODE=-119, SQLSTATE=42803, DRIVER=3.61.75 错误日志和sql server一个意思,就是除了聚合函数包裹的列以外,其余列必须出现在了gruop by之后方可被select 正确实例如下
db2 correct.png mysql数据库实操
mysql.png 可以发现mysql明显没有遵守这个原则。 使用order by 这个我就不截图了,主要说一哈group by 和order by连用时,order by 后面的字段必须出现在group by后面,mysql 又完美的错过了此规范。 这些问题都不大,大家严格遵守规范就不会出现问题。这里提一哈也算是个坑吧。
一个是带时区信息的时间,一个不带时区信息的时间。可能会导致时间错乱问题。 这里涉及到一个时间协议ISO 8601 国际标准化组织的国际标准ISO 8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前最新为第三版ISO8601:2004,第一版为ISO8601:1988,第二版为ISO8601:2000。 小时、分和秒都用2位数表示,对UTC时间最后加一个大写字母Z,其他时区用实际时间加时差表示。如UTC时间下午2点30分5秒表示为14:30:05Z或143005Z,当时的北京时间表示为22:30:05+08:00或223005+0800,也可以简化成223005+08。