背景
之前潘同学问了我一个问题,groupby如何刷选出同组个数次数最多的一行,我试了一下,没有找到解决方案,于是就回了他可能需要用函数来解决,但是后来又仔细想了一下,肯定有其他更好的方法,于是接着琢磨了一下。
过程
描述:按照c1,c2,c3分组,得到结果集
但是要得到c4,结果最多那个。
建表添加测试集
解决方案
解决问题思路
需要做两次groupby,第一次groupby统计出前三项相同的组出现的次数,然后对数量做倒序排列,groupby的特点,相同组的数据只取第一条,所以为了拿到数量最多的,我们需要对数量做倒序排列。第二次groupby才是真正的拿到数据,相同组的第一条数据pgSQl的解决方案
当时想到pgsql其实更好处理这个问题,不用想这个麻烦,异曲同工之妙。WITH……AS,pgsql显得更加的强大些。
知识扩展
mysql中count为什么需要参数,count(1)和count(*),count(a)有什么区别,其实count(1)和count(*)每什么区别,有区别的是count(a),它会过滤掉a=NULL的记录,所有count(a)=count(1)orcount(*)总结
MySQl和pgSQL功能实在太强大了,关系查询的特性,帮助我们减少了代码量,提升了工作效率。自己对数据库的知识尚且薄弱,仍有很多知识需要学习的。如果表的行数特别大的话,可能两次groupby操作比较耗时,所有我们可以分步骤进行,或者建立视图。