我有一个表,类似这样
id | name | tag |
1 | zhangsan | 1 |
2 | lisi | 1 |
3 | zhangsan | 2 |
我想要无重复name的所有行,并且tag最小的
取出来的数据这样:
id name tag
1 zhangsan 1
2 lisi 1
请问这种情况如何查询
id | name | tag |
1 | zhangsan | 1 |
2 | lisi | 1 |
3 | zhangsan | 2 |
我想要无重复name的所有行,并且tag最小的
取出来的数据这样:
id name tag
1 zhangsan 1
2 lisi 1
请问这种情况如何查询
754 阅读
1 回答570 阅读
...
如果你确实需要 id 这个字段的话, 你必须这么写:
解释一下吧, 在sql标准里, 如果用了group by和聚集函数, 那么select的字段必须是 group by的字段(例子里的name)或者 聚集函数(例子里的min(tag)). 所以
在某些数据库里是会报错的(好像oracle就是?)
但是很多数据库产品没有严格按标准来, 比如mysql:
http://dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html
但在这种情况下, 返回的结果集是不确定的. 所以最好在把sql写到产品去之前, 确切的知道它会做什么.
在Oracle 12C里报错: ORA-00979 not a GROUP BY expression
http://www.dba-oracle.com/t_ora_00979_not_a_group_by_expression.htm