2016-09-29 75 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