오라클에는 rank() 및 dense_rank()와 같은 두 가지 함수가 있습니다. 일부 응용 프로그램에서는 매우 유용한 것으로 나타났습니다. 나는 지금 mysql에서 뭔가를하고 있는데, 그것들에 상응하는 것이 있는지 궁금해하고 있단 말인가?ORACLES rank of MySQL
3
A
답변
3
직접적인 기능은 없지만 일부 (매우 효율적이지는 않음) 자체 조인으로 가짜로 만들 수 있습니다. collection of MySQL query howtos에서 일부 샘플 코드 :
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 |
+-------+-------+------+
0
방법이 (
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 후이
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()하기 전에 MySQL의에서 "DENSE_RANK 구현"에 대해) "분할 기준"기능 포함
+------------+--------+------+------+
| 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)
당신은 화이트와 브라운을 보면, 당신이 (제대로) 인 것을 볼 수 있습니다 배치 :
쿼리 문은
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. PostgreSQL에서 "rank x out of y"데이터를 어떻게 처리해야합니까?
- 2. microsoft sql of mysql REGEXP
- 3. proc rank in sas
- 4. 하스켈 및 Rank-N 다형성
- 5. let of go of auto_ptr
- 6. SEOMoz Rank Checker와 같은 도구는 어떻게 작동합니까?
- 7. Rank()가 정상적으로 작동하지 않는 이유는 무엇입니까?
- 8. 어떤 상황에서 Rank 및 Dense Rank가 유용할까요?
- 9. Sql Distinct of Duplicates
- 10. # import of .NET out-of-proc 서버
- 11. PHP와 MySQL : 어떻게 "SET @ rank = 0;"을 사용할 수 있습니까? $ 쿼리 = 내 PHP 파일에서
- 12. SQL dialect가 RANK()가 처음 도입 된 곳은 어디입니까?
- 13. Groovy에서 # of months and years of month를 쉽게 변환하는 방법
- 14. List (Of T) .ForEach의 Visual Basic 작업 (Of T)
- 15. 프로그래밍 방식으로 안드로이드의 "Layout of right of"속성을 설정하십시오.
- 16. Rowdatabound of gridview
- 17. EGit out of sync
- 18. Boost.Python id of object
- 19. performance of system.runtime.caching
- 20. JTree of objects?
- 21. cmd : open of variable
- 22. Swt.browser inside of Jpanel
- 23. Twitter of iPhone에서
- 24. Future of cmd & powershell
- 25. contentOffset of UIScrollView
- 26. ImageIcon of JTable 셀
- 27. Working of Php sessions
- 28. ObservableCollection of Winform controls
- 29. Facebook friends-of-friends
- 30. propel equivalent of "exists"
내가 더 나은 솔루션이 있었다 좋겠지 만,이 younes0 @ – giroy
을해야 할 것입니다 순위 3에 넥타이를 매긴 다음 순위 5로 건너 뜁니다. – chaos
@chaos 좋아요. 순위 5로 건너 뛰면 오라클 rank()의 기본 동작이됩니다. – younes0