2017-06-16 80 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