时间:2017-10-14 05:25:10

标签: mysql join sql-order-by union

我有一个表entries,其中包含以下列:id,email,sku,payment,created_at

我需要编写一些查询来对条目进行一些分析。我想要合并为一个的两个问题是:

  

SELECT sku,count(email)AS total_current FROM条目WHERE付款   IS NOT NULL和created_at> = DATE_SUB(NOW(),INTERVAL 1 WEEK)GROUP   作者:sku ORDER BY sku ASC

  

SELECT sku,count(email)AS total_previous FROM条目WHERE付款   IS NOT NULL和created_at< DATE_SUB(NOW(),INTERVAL 1 WEEK)和   created_at> = DATE_SUB(NOW(),INTERVAL 2 WEEK)GROUP BY sku ORDER BY   sku ASC

这里的目标是拥有1组结果,其中3列显示第2列中每个sku的记录数,以及第3列中相同sku的记录数。

  1. Sku(所有内容都已分组)

  2. total_current(计算每个单独sku的第一个查询的日期范围内的记录数量)

  3. total_previous(计算每个单独sku的第二个查询的日期范围内的记录数)

  4. 结果应按sku升序排序。

    我使用UNION和JOIN等尝试过很多不同的东西,但到目前为止没有运气。

1 个答案:

答案 0 :(得分:1)

您可以使用条件聚合来组合两个查询:

SELECT sku, 
       count(CASE 
                WHEN created_at >= DATE_SUB(NOW(), INTERVAL 1 WEEK)  THEN email
             END) AS total_current,
       count(CASE 
                WHEN  created_at < DATE_SUB(NOW(), INTERVAL 1 WEEK) AND
                     created_at >= DATE_SUB(NOW(), INTERVAL 2 WEEK)  THEN email
             END) AS total_previous
FROM entries 
WHERE payment IS NOT NULL AND 
      created_at >= DATE_SUB(NOW(), INTERVAL 2 WEEK)
GROUP BY sku 
ORDER BY sku ASC