需求:根据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

sql中distinct和order by问题的解决方案的更多相关文章

  1. 解决Sql中DIstinct与Order By共同使用的冲突问题

    1.需求场景: 需要把最新更新文章的前五名作者展示出来. 2.解决问题第一步: select top 5 creator from table order by updateDate desc 结果: ...

  2. SQL中distinct的用法

    SQL中distinct的用法   1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出 ...

  3. SQL中distinct的用法和left join查询的含义

    SQL中distinct的用法   1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出 ...

  4. SQL中distinct 和 row_number() over() 的区别及用法

    1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...

  5. SQL中rownum和order by的执行顺序的问题

    在一个SQL中,如果同时使用rownum和order by,会有一个先后顺序的问题. 比如select id1,id2 from t_tablename where rownum<3 order ...

  6. 数据库sql中distinct用法注意事项

    在写sql中去重复等操作,需要用到distinct. 在使用distinct的时候要注意,尤其是在有行列转换的时候.要把sql运行出来看看是不是与你想要的结果一样. 通过自己试验,distinct有从 ...

  7. sql中Distinct&Count的用法

    Distinct作用:消除重复的数值 1.如: select id from T1 select distinct id from T1 二者的检索效果如下: distinct可以用来修饰多列,如: ...

  8. SQL中distinct的用法(转自博主:Rain Man)

    在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 示例1 select distinct nam ...

  9. SQL中distinct的用法(转)

    原文:http://www.cnblogs.com/rainman/archive/2013/05/03/3058451.html 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出 ...

随机推荐

  1. Windows四大傻X功能——那些拖慢系统性能的罪魁祸首

    最近新装了一个PC,配置还算蛮高,i7的CPU,8G内存,2T的硬盘,于是小心翼翼地装了一个干净的正版Win7,但是发现居然开机明显卡?所以做了些研究,发现即使全新安装的正版windows,居然也有些 ...

  2. .net的mvc的fw版本为4.5发布到阿里云【云虚拟主机】上.

    注意:云虚拟主机和云服务器(ECS)不是同一个产品,请注意分别. 云服务器ECS: 云虚拟主机: 我用的是云虚拟主机也是第二个,版本是window server  声明:默认,已经把域名[已备案]绑定 ...

  3. #004 C语言大作业学生管理系统试着做

    链表不会用 文件不会使 在这种情况下就边写边做 希望这个月能做完这个作业 #include<stdio.h> #include<stdlib.h> #include<st ...

  4. 推酷文章中编写js组件系列文章整理

    一步一步实现JS拖拽插件 http://www.tuicool.com/articles/RBbmMjY JS组件系列——基于Bootstrap Ace模板的菜单和Tab页效果分享 http://ww ...

  5. ElasticSearch(二):允许外网连接服务配置

    上一篇文章的配置,只能在本机使用,但是要想为集群或者其他的机器连接,则需要做以下配置: 一.修改/opt/elasticsearch-6.4.0/config/elasticsearch.yml文件 ...

  6. java的回调

    java的回调 1,明确什么是回调方法 2,采用接口来实现回调 java同步回调 一个类实现了接口,将他传递给另一个类,在另一个类调用接口中方法 public class Bar implements ...

  7. 启动PHP study时提示80端口或者3306端口被占用的解决办法

    一.查看PID WIN+R打开命令行------>netstat -ano+回车,就会显示下面的信息: 二.打开任务管理器 Ctrl+Alt+Delete------>任务管理器,找到对应 ...

  8. 【转】Chrome 控制台新玩法-console显示图片以及为文字加样式

    在正常模式下,一般只能向console 控制台输出简单的文字信息.但为了把信息输出得更优雅更便于阅读,除了cosole.log()方法外还可以调用 cosole.warn() 来输出警告信息,在控制台 ...

  9. 分区默认segment大小变化(64k—>8M)

    _partition_large_extents和_index_partition_large_extents 参考: http://www.xifenfei.com/2013/08/%E5%88%8 ...

  10. poj-1330(暴力写的lca)

    传送门 一看就是lca的板子题 然而 (写这个的时候我忘了怎么写lca) 于是我就试着写暴力了 本以为会tle结果e了一次后居然a掉了 开心到起飞.嘿嘿嘿 但还是格式输出错误了一次而且在ce之前也de ...