首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORACLES的MySQL等价物rank()

ORACLES的MySQL等价物rank()
EN

Stack Overflow用户
提问于 2009-08-24 02:09:01
回答 2查看 5.3K关注 0票数 5

Oracle有两个函数-- rank()和dense_rank() --我发现这两个函数对某些应用程序非常有用。我现在正在用mysql做一些事情,我想知道他们是否有类似的东西?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-24 02:18:46

没有直接等价的东西,但是你可以通过一些(不是非常有效的)自连接来伪造它。collection of MySQL query howtos中的一些示例代码

代码语言:javascript
复制
SELECT v1.name, v1.votes, COUNT(v2.votes) AS Rank
FROM votes v1
JOIN votes v2 ON v1.votes < v2.votes OR (v1.votes=v2.votes and v1.name = v2.name)
GROUP BY v1.name, v1.votes
ORDER BY v1.votes DESC, v1.name DESC;
+-------+-------+------+
| name  | votes | Rank |
+-------+-------+------+
| Green |    50 |    1 |
| Black |    40 |    2 |
| White |    20 |    3 |
| Brown |    20 |    3 |
| Jones |    15 |    5 |
| Smith |    10 |    6 |
+-------+-------+------+ 
票数 3
EN

Stack Overflow用户

发布于 2016-01-01 13:45:12

MySQL中的这个"dense_rank实现“怎么样?

代码语言:javascript
复制
CREATE TABLE `person` (  
 `id` int(11) DEFAULT NULL,  
 `first_name` varchar(20) DEFAULT NULL,  
 `age` int(11) DEFAULT NULL,  
 `gender` char(1) DEFAULT NULL);

INSERT INTO `person` VALUES 
(1,'Bob',25,'M'),
(2,'Jane',20,'F'),
(3,'Jack',30,'M'),
(4,'Bill',32,'M'),
(5,'Nick',22,'M'),
(6,'Kathy',18,'F'),
(7,'Steve',36,'M'),
(8,'Anne',25,'F'),
(9,'Mike',25,'M');

dense_rank()之前的数据如下所示

代码语言:javascript
复制
mysql> select * from person;
+------+------------+------+--------+
| id   | first_name | age  | gender |
+------+------------+------+--------+
|    1 | Bob        |   25 | M      |
|    2 | Jane       |   20 | F      |
|    3 | Jack       |   30 | M      |
|    4 | Bill       |   32 | M      |
|    5 | Nick       |   22 | M      |
|    6 | Kathy      |   18 | F      |
|    7 | Steve      |   36 | M      |
|    8 | Anne       |   25 | F      |
|    9 | Mike       |   25 | M      |
+------+------------+------+--------+
9 rows in set (0.00 sec)

dense_rank()之后的数据如下,包括"partition by“函数

代码语言:javascript
复制
+------------+--------+------+------+
| first_name | gender | age  | rank |
+------------+--------+------+------+
| Anne       | F      |   25 |    1 |
| Jane       | F      |   20 |    2 |
| Kathy      | F      |   18 |    3 |
| Steve      | M      |   36 |    1 |
| Bill       | M      |   32 |    2 |
| Jack       | M      |   30 |    3 |
| Mike       | M      |   25 |    4 |
| Bob        | M      |   25 |    4 |
| Nick       | M      |   22 |    6 |
+------------+--------+------+------+
9 rows in set (0.00 sec)

查询语句为

代码语言:javascript
复制
select first_name,t1.gender,age,FIND_IN_SET(age,t1.age_set) as rank from person t2,
(select gender,group_concat(age order by age desc) as age_set from person group by gender) t1
where t1.gender=t2.gender
order by t1.gender,rank
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1320173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档