男士
mysql-关于groupby和distinct
有⼀个需求,从⼀堆 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,例如:lect distinct(id), value from table。
颠倒词但这样做,得到的不是distinct后的记录,是所有记录。如果想实现distinct效果,就得只使⽤要distinct的字段。大二个人学年总结
狮子头鱼找了找,看到⽹上还有⼀个⽤distinct去重复,并取得所有字段的⽅法,但其实也是使⽤了GroupBy:
ppt结构图lect *, count(distinct name) from table group by name
参考:
关于GroupBy和Distinct的性能问题,找了⼀些资料,有的说Distinct好,有的说GroupBy好,
雷锋什么时候死的
但有⼀点是相同的,就是被查找的字段上有索引是最好的。