2017-06-19 169 views
0

我正在查看一些关键字排名,并且需要带回关于URL已增加排名的关键字数量,排名降低,数据保持不变的数据。我的数据看起来像这样:如何用mysql执行COUNTIF公式

URL | Keyword | Position | Previous position | Keyword Movement 

example.com/page1 | things to do london | 38 | 101| Up 
example.com/page2 | mens shoes size 8  | 48 | 94 | Up 
example.com/page3 | notebooks    | 22 | 2 | Down 
example.com/page4 | macbook pros for sale | 52 | 52 | Same 
example.com/page1 | homebrew supplies  | 56 | 46 | Down 
example.com/page2 | sql tutorials   | 70 | 39 | Down 
example.com/page3 | random seo keywords | 88 | 36 | Down 
example.com/page4 | best albums of 2017 | 94 | 95 | Up 
example.com/page5 | fender stratocaster | 19 | 9 | Down 
example.com/page6 | qotsa     | 91 | 34 | Down 

我想有一个表格显示的URL,关键字增加数量,没有。的关键字减少,没有。的关键字保持不变。在Excel中,这可以使用countif公式完成,但不知道如何使用mysql来做到这一点。我想要一张如下所示的表格:

URL |Keywords Up |Keywords Down |Keywords remain 


example.com/page1 | 1 | 1 | 0 
example.com/page2 | 1 | 1 | 0 
example.com/page3 | 0 | 2 | 0 
example.com/page4 | 1 | 0 | 1 
example.com/page5 | 0 | 1 | 0 
example.com/page6 | 0 | 1 | 0 

我正在寻找一种在“Movement”列上进行countif的方法。

谢谢。

+0

本质上,你想要做的是创建一个数据透视表。链接的重复主题同时描述了静态(列数已预先知道 - 这可能是您的情况)和动态(列数未知)。但是,请注意,在应用程序逻辑中执行此类转换可能比在sql代码中更高效。 – Shadow

回答

1

您可以在Movement列中使用条件聚合,然后计算三种移动类型,按URL分组。

SELECT 
    URL, 
    SUM(CASE WHEN Movement = 'Up' THEN 1 ELSE 0 END) AS keywords_up, 
    SUM(CASE WHEN Movement = 'Down' THEN 1 ELSE 0 END) AS keywords_down, 
    SUM(CASE WHEN Movement = 'Same' THEN 1 ELSE 0 END) AS keywords_remain 
FROM yourTable 
GROUP BY URL