首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同日期的MySQL select语句

不同日期的MySQL select语句
EN

Stack Overflow用户
提问于 2018-08-23 22:09:51
回答 2查看 38关注 0票数 0

我有张桌子,看起来像这样:

代码语言:javascript
复制
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 

我想选择所有唯一的urls和他们的度量两个单独的月。像这样的…2018年8月和9月…

/url-1, kw_count (aug), kw_count (sept), imp (aug), img (sept)...等,然后同样适用于url-2。

我不知道之前的网址-手,这是简单的选择根据选定的日期。

我一辈子都想不出该怎么做。我曾经和group by和其他人一起玩过,但我正在挣扎。

我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-23 22:29:08

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

代码语言:javascript
复制
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

输出(用于样本数据):

代码语言:javascript
复制
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来播放(如果你发布文本而不是你的数据的图片,那就容易多了!)

票数 2
EN

Stack Overflow用户

发布于 2018-08-23 22:28:55

您的表包含每个月的记录和url。现在选择一个月,选择另一个月,加入两个数据集,您就完成了。这将是:

代码语言:javascript
复制
select *
from (select * from mytable where month_year = 'Aug-2018') m201808
full outer join (select * from mytable where month_year = 'Sept-2018') m201809 using (url);

由于MySQL不支持完全外部连接,因此我们必须先获得urls,然后才能在两个月内获得外部连接:

代码语言:javascript
复制
select *
from (select distinct url from mytable where month_year in ('Aug-2018', 'Sept-2018')) urls
left join (select * from mytable where month_year = 'Aug-2018') m201808 using (url)
left join (select * from mytable where month_year = 'Sept-2018') m201809 using (url);

当然,您应该将select *替换为列名:

代码语言:javascript
复制
select
  url,
  m201808.kw_count as kw_count_201808,
  m201809.kw_count as kw_count_201809,
  ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51994937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档