2017-06-16 74 views
0

我在比较URL的搜索引擎排名,我有3列:URL,排名,以前的排名。我想要做的是添加第四栏,说明排名是上涨还是下跌。如何在mysql中执行IF语句作为SELECT语句的一部分

例如

URL    | Rank | Previous_Rank 
example.com/page1 | 2 | 16 
example.com/page2 | 2 | 11 
example.com/page3 | 1 | 14 
example.com/page4 | 1 | 4 
example.com/page5 | 101| 7 
example.com/page6 | 101| 14 
example.com/page7 | 101| 7 
example.com/page8 | 6 | 17 
example.com/page9 | 10| 17 
example.com/page10| 19| 1 

我想另一列返回:

URL     | Rank | Previous_Rank | Movement 
    example.com/page1 | 2 | 16 | Up 
    example.com/page2 | 2 | 11 | Up 
    example.com/page3 | 1 | 14 | Up 
    example.com/page4 | 1 | 4 | Up 
    example.com/page5 | 101| 7 | Down 
    example.com/page6 | 101| 14 | Down 
    example.com/page7 | 101| 7 | Down 
    example.com/page8 | 6 | 17 | Up 
    example.com/page9 | 10| 17 | Up 
    example.com/page10| 19| 1 |Down 

我使用HeidiSQL是MySQL的。这里的数据是一个大表的一部分,并与该SELECT语句一起拉:

select 
    URL, 
    Rank, 
    Previous_Rank 
from URL_Changes 
where 
    date = "2017-06-14" 
group by URL 
order by 2 
; 

所以我的问题是,我该如何编辑SELECT语句带回额外的列?

谢谢。

回答

1

您使用CASE语句是:

select 
    URL, 
    Rank, 
    Previous_Rank, 
    CASE WHEN Rank < Previous_Rank THEN 'Up' WHEN Rank > Previous_Rank THEN 'Down' WHEN Rank = Previous_Rank THEN 'No Change' END AS Movement 
from URL_Changes 
where 
    date = "2017-06-14" 
group by URL 
order by 2 
; 

在MySQL中也有一个IF()功能,但CASE用在几乎每一个RDBMS和IF()需要嵌套,测试多个场景,让Case一般更好的选择。

+0

非常感谢! – jceg316