我正在比较网址的搜索引擎排名,我有3列:网址,排名,上一个排名。我想做的是添加第四列,说明等级是上升还是下降。
例如
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语句以恢复该额外的列?
感谢。
答案 0 :(得分:1)
您使用plan
语句:
apply
在MySQL中还有一个CASE
函数,但几乎每个RDBMS都使用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
;
,而IF()
需要嵌套来测试多个场景,因此CASE
通常是IF()
更好的选择。