• sql中distinct和order by问题的解决方案


        需求:根据PID字段对数据去重,根据Sort字段排序,需要显示这个两个字段。

        

        如图,这是原始数据,先排序:

        

        排序后发现两个项是重复的,需要去除一个,

        

        因为Distinct对检查Select里面的每一列,出现的每一列必须都相同才算重复数据,而排序后的数据里面相同Pid的数据的sort值不同,Distinct此时就失效了。

        

        于是Select里面去掉sort,提示语法错误:如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中。语法问题,但是加上sort之后由于同Pid的数据的sort值不同,此时无法去重!这里就是两个语法互相牵制了,DISTINCT不能指定Select后面的某一个或者某几个列去重,ORDER BY 和Distinct之间又有那么一层关系,真是难。网上找了好久也是没找到解决方案,一度要放弃了。

        But,同事告诉了我一个新技能,那就是ROW_NUMBER() OVER !

        

        看到这个了吗,RID,通过PARTITION by进行分组,相同的归为一组,因此第二个相同PID的值就是2了,其他的按sort顺序排列的都是1,也就是说此时,只需要在外面再包一层查询就能得到想要的结果了

        

        是不是很神奇?O(∩_∩)O哈哈~  反正是解决了我的问题,对PARTITION by也有了一个认识,说实话还是很感谢我同事的,大忙啊,网上这方面的解决方案太少了,希望以后谁看见这个以后也能有所帮助!

         PS:如果对你有帮助希望能点个赞,或者去我的个人博客上评论留言,蹭个人气,博客地址: http://www.lovemoqing.com/Home/Detail?infoID=23

  • 相关阅读:
    博客开通第77天
    guzzlephp使用教程
    Mac下php70memcache安装
    opcache开启和关闭
    php的getimagesize方法详解
    Yii2框架解剖
    AES加密:PHP与Java互通问题
    公司网页监控到的各种不能识别的浏览器userAgent,都是些什么啊
    document.write
    js模版引擎v6注解
  • 原文地址:https://www.cnblogs.com/sunshine-wy/p/8021657.html
Copyright © 2020-2023  润新知