简体   繁体   English

如何在mysql语句中做IF语句作为SELECT语句的一部分

[英]How to do an IF statement in mysql as part of the SELECT statement

I'm comparing search engine rankings for URLs and I have 3 columns: URL, Rank, Previous rank. 我正在比较URL的搜索引擎排名,并且我有3列:URL,排名,上一个排名。 What I'd like to do is add a fourth column which says whether the rank has gone up or down. 我想做的是添加第四列,该列表示排名是上升还是下降。

For example 例如

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

I'd like another column to return: 我想再返回一列:

 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

I'm using HeidiSQL which is mysql. 我正在使用HeidiSQL,它是mysql。 The data here is part of a larger table and is pulled together with this SELECT statement: 此处的数据是较大表的一部分,并与此SELECT语句一起拉出:

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

So my question is, how do I edit that select statement to bring back that extra column? 所以我的问题是,如何编辑该选择语句以带回该额外的列?

Thanks. 谢谢。

You use a CASE statement for this: 为此,请使用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
;

In MySQL there is also an IF() function, but CASE is used on nearly every RDBMS and IF() requires nesting to test for multiple scenarios, so Case is generally the better choice. 在MySQL中,还有一个IF()函数,但是几乎每个RDBMS都使用CASE并且IF()需要嵌套以测试多种情况,因此,通常使用Case是更好的选择。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM