如题,如果mysql数据库中有一个表table,字段分别有a、b、c、d,想根据字段a分组,然后显示每组的第一条,sql语句格式为:select a,MIN(b),c,d from table group by a。
在sql查询的结果集中,b字段可以取到最小值,那么c和d字段是取?数据内容
a b c d
1 1 1 1
1 2 2 2
1 3 3 3以上数据内容从mysql数据库直接查询,结果集为:1、1、1、1,但是从代码里查询,返回的结果集是:1,1,3,3。求大神解惑!!!
在sql查询的结果集中,b字段可以取到最小值,那么c和d字段是取?数据内容
a b c d
1 1 1 1
1 2 2 2
1 3 3 3以上数据内容从mysql数据库直接查询,结果集为:1、1、1、1,但是从代码里查询,返回的结果集是:1,1,3,3。求大神解惑!!!
当数据group by后,上下文会切换为每个组而不再是每行。因此,标准SQL中,select字段列表中无法使用非分组字段,因为违反了关系模型的范式。
在mysql中,对标准SQL的GROUP BY进行了扩展(换句话说,违反了关系模型的范式),select字段列表中可以使用非分组字段。
http://www.cnblogs.com/f-ck-need-u/p/8656828.html
谢谢回答,按文中的意思,虽然mysql对group by进行了扩展,但是不按sql规范写的sql语句执行的结果是不可预知,随机的,所以最好还是按照sql规范写语句,是这样吧?
但SQL规范既然是为了标准而定的,自然是可以违反的,毕竟MySQL也有它自己的"个性"。只要你知道这么做对你的需求不造成影响(特别是增删改语句),那就无所谓啊。