2014-01-17 34 views
0

我的表是这样的:排名SQL列

+--------+--------+--------+ 
| color | fruit | amount | 
+--------+--------+--------+ 
| red | cherry | 124 | 
| red | plum |  23 | 
| green | gauva | 119 | 
| green | pear |  14 | 
| orange | orange |  23 | 
+--------+--------+--------+ 

我希望它添加排名是这样的。

+------+--------+--------+--------+ 
| rank | color | fruit | amount | 
+------+--------+--------+--------+ 
| 1 | red | cherry | 124 | 
| 2 | red | plum |  23 | 
| 1 | green | gauva | 119 | 
| 2 | green | pear |  14 | 
| 1 | orange | orange |  23 | 
+------+--------+--------+--------+ 

我需要根据每种颜色的量(单独)对它进行排名。 这可能吗?

+0

是基于'amount'的数量(对于每个'color') – Strawberry

+0

可能的[Mysql rank function]的重复(http://stackoverflow.com/questions/3333665/mysql-rank-function) – Mureinik

+0

@Strawberry更新问题 – rbawaskar

回答

2
select 
color, fruit, amount, 
case when (if(@prev_color != color, @rank:=1, @rank:[email protected] + 1)) is null then null 
    when (@prev_color := color) is null then null 
else @rank end as rank 
from your_table 
, (select @rank:=0, @prev_color := null) v 
order by color, amount desc 
0

试试这个

SELECT @row_num := IF(@prev_value=o.Customer,@row_num+1,1) AS RowNumber 
     ,colour 
     ,fruit 
     ,amount 
     ,@prev_value := colour 
    FROM Table1, 
     (SELECT @row_num := 1) x, 
     (SELECT @prev_value := '') y 
    ORDER BY colour,amount DESC 
1

如果是基于color可用性高amount给出的行列,那么你也可以找到行的数量小于或大于与amount值更。该行数将是有关colorrank

select 
(select count(color) from fruits_table 
    where color = f.color and amount >= f.amount 
) as 'rank', 
color, fruit, amount 
from fruits_table f 
order by color, amount desc 
-- order by field(color, 'red', 'green', 'orange'), amount desc 
; 

可以通过改变color字段的顺序与使用field功能所需的顶部或底部,以显示。请参阅上面的注释order by子句。

0

尝试使用,您可以指定一个行号函数从哪里开始,然后编号超过(分区所)以及如何组织该分区中的行(ORDER BY)

| rank | color | fruit | amount | 
+------+--------+--------+--------+ 
| 1 | red | cherry | 124 | 
| 2 | red | plum |  23 | 
| 1 | green | gauva | 119 | 
| 2 | green | pear |  14 | 
| 1 | orange | orange |  23 | 
+------+--------+--------+--------+ 
select distinct 
    row_number() over (partition by color order by amount desc) rank, 
    color, 
    fruit, 
    amount 
from 
    foo 
order by 
    color, amount desc 

你将发现行编号从每种新颜色开始,并且在每种颜色中,行将按照按降序排列的量进行排序。

+0

这个问题被标记为MySQL。但是,这个答案似乎并不在MySQL中。 – Pang