首页 > 解决方案 > 跨不同日期的 MySQL 选择语句

问题描述

我有一个看起来像这样的表:

Month/Year id url     kw_count IMP CLK POS CTR 
Aug-2018    1 /url-1       222 444 122   4 1.2 
Sept-2018   2 /url-1       232 534 123   4 1.2 
Oct-2018    3 /url-1       224 445 124   4 1.2 
Nov-2018    4 /url-1       212 478 125   4 1.2 
Aug-2018    5 /url-2       233 434 126   4 1.2 
Sept-2018   6 /url-2       311 433 128   4 1.2 
Oct-2018    7 /url-2       299 423 123   4 1.2 
Nov-2018    8 /url-2       232 411 122   4 1.2 
Dec-2018    9 /url-2       231 465 156   5 1.1 

我想选择两个不同月的所有唯一网址及其指标。像这样……2018 年 8 月和 9 月……</p>

/url-1, kw_count (aug), kw_count (sept), imp (aug), img (sept)...等等,然后对于 url-2 也是一样的

我不会事先知道 URL,它只是根据所选日期进行选择。

我一辈子都想不通我怎么能做到这一点。我和其他人一起玩过,group by但我很挣扎。

我怎样才能做到这一点?

标签: mysqlsqlmysql-python

解决方案


这样的事情应该做你想做的事:

SELECT url, 
    SUM(CASE WHEN `Month\Year` = 'Aug-2018' THEN kw_count END) AS `kw_count (Aug)`,
    SUM(CASE WHEN `Month\Year` = 'Sep-2018' THEN kw_count END) AS `kw_count (Sep)`,
    SUM(CASE WHEN `Month\Year` = 'Aug-2018' THEN IMP END) AS `IMP (Aug)`,
    SUM(CASE WHEN `Month\Year` = 'Sep-2018' THEN IMP END) AS `IMP (Sep)`,
    SUM(CASE WHEN `Month\Year` = 'Aug-2018' THEN CLK END) AS `CLK (Aug)`,
    SUM(CASE WHEN `Month\Year` = 'Sep-2018' THEN CLK END) AS `CLK (Sep)`,
    SUM(CASE WHEN `Month\Year` = 'Aug-2018' THEN POS END) AS `POS (Aug)`,
    SUM(CASE WHEN `Month\Year` = 'Sep-2018' THEN POS END) AS `POS (Sep)`,
    SUM(CASE WHEN `Month\Year` = 'Aug-2018' THEN CTR END) AS `CTR (Aug)`,
    SUM(CASE WHEN `Month\Year` = 'Sep-2018' THEN CTR END) AS `CTR (Sep)`
FROM metrics
GROUP BY url

输出(用于您的样本数据):

url     kw_count (Aug)  kw_count (Sep)  IMP (Aug)   IMP (Sep)   CLK (Aug)   CLK (Sep)   POS (Aug)   POS (Sep)   CTR (Aug)   CTR (Sep)
/url-1  222             232             444         534         122         123         4           4           1           1
/url-2  233             311             434         433         126         128         4           4           1           1

构建查询时,您需要适当地调整日期和列名。我创建了一个演示SQLFiddle来玩(如果您发布的是文本而不是数据的图像,那会容易得多!)。


推荐阅读