postgres 实现查询某条数据的排名
我就废话不多说了,大家还是直接看代码吧~
select * from (select ROW_NUMBER () OVER (ORDER BY fat desc nulls last) AS xuhao,foodnum,foodname,fat from ek_food where isdel=0) food where foodnum = 'Ss192008'
涉及到的问题
1.排序时,字段值为null的会排在前面,导致数据不准确,解决办法 在order by后面增加 nulls last
2.给查询的结果增加序号 select ROW_NUMBER () OVER (ORDER BY fat desc nulls last) AS xuhao
补充:利用 PostgreSQL 实现对数据进行排名
一、需求:对以下用户的积分进行排名计算
| user_id | name | score |
| 1 | john | 1000 |
| 2 | mike | 1200 |
| 3 | jelly | 1300 |
| 4 | brook | 1500 |
| 5 | nanny | 1200 |
需要知道 user_id = k 的用户对应的积分排名
二、通过 PostgreSQL 的窗口函数实现
SELECT user_id, name, score, RANK() OVER (ORDER BY score DESC) FROM user;
| user_id | name | score | rank |
| 4 | brook | 1500 | 1 |
| 3 | jelly | 1200 | 2 |
| 2 | mike | 1300 | 3 |
| 5 | nanny | 1500 | 3 |
| 1 | john | 1200 | 5 |
如要获取排名 < 3 的用户:
SELECT user_id, name, score, user_rank FROM (SELECT user_id, name, score, RANK() OVER (ORDER BY score DESC) AS user_rank FROM user) AS T WHERE user_rank < 3;
-- 注意子查询在from中需要写别名
| user_id | name | score | rank |
| 4 | brook | 1500 | 1 |
| 3 | jelly | 1200 | 2 |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。
相关推荐
-
postgresql查询锁表以及解除锁表操作
1.-- 查询ACTIVITY的状态等信息 select T.PID, T.STATE, T.QUERY, T.WAIT_EVENT_TYPE, T.WAIT_EVENT, T.QUERY_START from PG_STAT_ACTIVITY T where T.DATNAME = '数据库用户名'; 上面查询结果中:pid就是ACTIVITY的唯一标识,state就是活动状态,query就是正在执行的sql语句,query--start就是开始执行的时间. 2.-- 查询死锁的ACTIVIT
-
postgresql数据库根据年月查询出本月的所有数据操作
表里的所有数据: 现在我要根据创建时间的 年月查询 当月所有的数据 比如前台传给我一个年月的字段planTimeMonth,值为2018-06 那么我们需要查询创建时间为6月份的所有数据 sql: java代码中sql拼接: criteria.andCondition("to_char(crt_time, 'yyyy-mm')='"+query.get("planTimeMonth").toString()+"'"); 补充:postgresql
-
postgresql通过索引优化查询速度操作
当数据量比较大的时候,提升查询效率就是需要去考虑的事情了.一个百万级别的表格,如果不做任何优化的话,即使是最简单的查询语句执行起来也是慢的让人难以接受:当然"优化"本身是一个比较复杂的工程,从设计表.字段到查询语句的写法都有很多讲究,这里只考虑索引的方式,且是最普通的索引: 下面的操作中对应数据库表w008_execrise_info(8000数据量), w008_wf02_info(4000数据量) 1 任务表数据 SELECT w.* FROM w008_wf02_info w W
-
Postgresql 实现查询一个表/所有表的所有列名
假设postgres有数据库testdb 在testdb下执行下列sql语句,得到所有表的信息 select * from information_schema.columns where table_schema='public' and table_name<>'pg_stat_statements'; 在testdb下执行下列sql语句,得到所有表的列名 select column_name from information_schema.columns where table_sche
-
postgres 实现查询某条数据的排名
我就废话不多说了,大家还是直接看代码吧~ select * from (select ROW_NUMBER () OVER (ORDER BY fat desc nulls last) AS xuhao,foodnum,foodname,fat from ek_food where isdel=0) food where foodnum = 'Ss192008' 涉及到的问题 1.排序时,字段值为null的会排在前面,导致数据不准确,解决办法 在order by后面增加 nulls last 2
-
解决mybatis一对多关联查询多条数据只显示一条的问题
一对多,如果多个表字段名相同,要记住使用别名,否则多条数据只显示一条 <resultMap type="com.example.demo.model.TuserModel" id="extendMapper"> <id column="id" property="id" /> <result column="user_name" property="userName&
-
mysql 查询重复的数据的SQL优化方案
在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写.如: 复制代码 代码如下: select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1) ORDER BY upper(Source) DESC; 这条
-
MySQL 多表关联一对多查询实现取最新一条数据的方法示例
本文实例讲述了MySQL 多表关联一对多查询实现取最新一条数据的方法.分享给大家供大家参考,具体如下: MySQL 多表关联一对多查询取最新的一条数据 遇到的问题 多表关联一对多查询取最新的一条数据,数据出现重复 由于历史原因,表结构设计不合理:产品告诉我说需要导出客户信息数据,需要导出客户的 所属行业,纳税性质 数据:但是这两个字段却在订单表里面,每次客户下单都会要求客户填写:由此可知,客户数据和订单数据是一对多的关系:那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同
-
关于MyBatis 查询数据时属性中多对一的问题(多条数据对应一条数据)
数据准备 数据表 CREATE TABLE `teacher`( id INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `teacher`(id,`name`) VALUES(1,'大师'); CREATE TABLE `student`( id INT(10) NOT NULL, `name` VARCHAR
-
Mysql中一千万条数据怎么快速查询
目录 普通分页查询 如何优化 偏移量大 采用id限定方式 优化数据量大问题 普通分页查询 当我们在日常工作中遇到大数据查询的时候,第一反应就是使用分页查询. mysql支持limit语句来选取指定的条数数据,而oracle可以使用rownum来选取 mysql分页查询语句如下: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 第一个参数用来指定第一个返回记录行的偏移量 第二个参数指定返回记录行的最大数目 当相同的偏移量时
-
oracle实现根据字段分组排序,取其第一条数据
目录 以某个字段分组 取其第一条数据 oracle中对表中数据分组排序取最值 首先创建操作表emp 业务场景 总结 以某个字段分组 取其第一条数据 select * from (select t.app_id, t.emp_no, t.device_id, t.device_type, t.last_connect_time, t.device
-
Oracle结合Mybatis实现取表TOP 10条数据
之前一直使用mysql和informix数据库,查表中前10条数据十分简单: 最原始版本: select top * from student 当然,我们还可以写的复杂一点,比如外加一些查询条件? 比如查询前10条成绩大于80分的学生信息 添加了where查询条件的版本: select top * from table where score > 80 但是!!oracle中没有top啊!!!!那么该如何实现呢? 嗯,可以用rownum! oracle中原始版本 select * from st
-
MySQL优化总结-查询总条数
1.COUNT(*)和COUNT(COL) COUNT(*)通常是对主键进行索引扫描,而COUNT(COL)就不一定了,另外前者是统计表中的所有符合的纪录总数,而后者是计算表中所有符合的COL的纪录数.还有有区别的. 优化总结,对于MyISAM表来说: 1.任何情况下SELECT COUNT(*) FROM tablename是最优选择: 2.尽量减少SELECT COUNT(*) FROMtablename WHERE COL = 'value' 这种查询: 3.杜绝SELECT COUNT(
-
四种数据库随机获取10条数据的方法
四种数据库随机获取10条数据的方法 SQL Server: 复制代码 代码如下: SELECT TOP 10 * FROM T_USER ORDER BY NEWID() ORACLE: 复制代码 代码如下: SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE RONUM <= 10 MySQL: 复制代码 代码如下: SELECT * FROM T_USER ORDER BY RAND() LIM
随机推荐
- AngularJS 过滤器的简单实例
- 写出高性能SQL语句的35条方法分析
- 详解租约机制以及在hbase中的应用
- jsp 自定义标签实例
- Ubuntu下MySQL及工具安装配置详解
- js实现双击图片放大单击缩小的方法
- jQuery中$.each()函数的用法引申实例
- Redis教程(十五):C语言连接操作代码实例
- Python爬虫之xlml解析库(全面了解)
- c# 连接access数据库config配置
- sqlserver中重复数据值只取一条的sql语句
- JavaScript判断DIV内容是否为空的方法
- MFC程序设计常用技巧汇总
- CISCO路由器的基本安装维护
- Python入门之三角函数atan2()函数详解
- 利用C#代码将html样式文件与Word文档互换的方法
- jQuery实现滚动到底部时自动加载更多的方法示例
- .NET Core 迁移躺坑记续集之Win下莫名其妙的超时
- Vue隐藏显示、只读实例代码
- vue项目打包后怎样优雅的解决跨域
