2016-09-29 48 views
2

我有这个表MYSQL排名分区

| Name  | Born  | Live  | Age | 
|-------- |------- |-------- |----- | 
| John  | UK  | UK  | 10 | 
| Smith  | UK  | France | 12 | 
| Ben  | Spain  | Spain  | 15 | 
| George | Spain  | UK  | 25 | 
| Ann  | UK  | UK  | 27 | 
| Cassie | Spain  | Spain  | 30 | 

,我想这

| Name  | Born  | Live  | Age | | Rank | 
|-------- |------- |-------- |----- | |------| 
| John  | UK  | UK  | 10 | | 1 | 
| Ann  | UK  | UK  | 27 | | 2 | 
| Smith  | UK  | France | 12 | | 1 | 
| Ben  | Spain  | Spain  | 15 | | 1 | 
| Cassie | Spain  | Spain  | 30 | | 2 | 
| George | Spain  | UK  | 25 | | 1 | 

所以我想一个等级groupping由出生并生活。

我知道在SQL中我们可以使用RANK和PARTITION来实现这个功能,但是在MYSQl中我找不到这样做的方法。任何人都可以帮忙

回答

1

我想你应该看看:Rank function in MySQL

希望它会帮助你)!

+0

我看到了答案,但它只是一个排名而不是排名分区 – user1851366

+0

对不起,我的不好;)你见过这个吗? http://stackoverflow.com/questions/3162389/multiple-ranks-in-one-table/ 它可以满足您的需求 – KatharaDarko

+0

Nop easy,因为他们只是想与1列gruping,并且我想要2 – user1851366

1
SELECT Name, Born, Live,Age, 
    @rank := IF(@prev_born = Born, @rank + 1,1) AS Born_rank, 
    @prev_Born := Born 
FROM TABLE,(select @prev_born :=0,@rank :=0) r 
ORDER BY Born, Age ASC 
+0

尽管此代码可能会起作用,那么问问你的人是否可以提供一些见解将会更有用...... – joanolo