mysql-关于groupby和distinct
有⼀个需求,从⼀堆 id 相同记录中取得第⼀条记录,并显⽰所有字段
例:
id        value
111    aaa
111    abc
222  bcefd
222  lkjdfgroupby是什么函数
由于不了解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
参考:
关于GroupBy和Distinct的性能问题,了⼀些资料,有的说Distinct好,有的说GroupBy好,
但有⼀点是相同的,就是被查的字段上有索引是最好的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。