有一个需求,从一堆 id 相同记录中取得第一条记录,并显示所有字段
例:
id value
111 aaa
111 abc
222 bcefd
222 lkjdf
由于不了解mysql的GroupBy,第一个相法就是不能用GroupBy。但解决这个问题正是用GroupBy。
下面是网上找的GroupBy的一些说明:
GROUP BY 语法在 MySQL 数据库中的用法与其他数据库相差较大。对于标准 SQL 而言,GROUP BY 一定要结合聚合函数使用,而且选择的字段除了聚合函数外,还必须在 GROUP BY 中出现。但是在 MySQL 中扩展了 GROUP BY 的功能:
不加聚合函数的情况下,返回的结果是 GROUP BY 结果集中第一行,如上面例子所示。
GROUP BY 结合聚合函数的时候,选择的字段不必在 GROUP BY 中存在,MySQL 具有隐含字段的功能。
所以我们可以根据 MySQL 对 GROUP BY 的扩展特性,结合另外一些关键字如 ORDER BY 等,方便的得到想要的查询结果。
第一个想到的办法是distinct,例如:select distinct(id), value from table。
但这样做,得到的不是distinct后的记录,是所有记录。如果想实现distinct效果,就得只使用要distinct的字段。
找了找,看到网上还有一个用distinct去重复,并取得所有字段的方法,但其实也是使用了GroupBy:
select *, count(distinct name) from table group by name
参考:
http://chenhao518g.blog.163.com/blog/static/34069748201011240113775/
http://www.aspku.com/database/mysql/82705.html
关于GroupBy和Distinct的性能问题,找了一些资料,有的说Distinct好,有的说GroupBy好,
但有一点是相同的,就是被查找的字段上有索引是最好的。
http://www.cnblogs.com/zox2011/archive/2012/09/12/2681797.html
http://blog.51yip.com/mysql/1105.html
http://www.aspku.com/database/mysql/92932.html