2017-10-14 79 views
1

我有一个表entries有以下的列:ID,电子邮件,SKU,付款,created_atMySQL的:2个不同的查询与计数和组相同的表由

我需要写一些查询得到一些分析在条目上。这两个查询我想合并成一个有:

SELECT SKU,计数(电子邮件)AS total_current从各项WHERE支付 IS NOT NULL和created_at> = DATE_SUB(NOW(),间隔1周) GROUP BY SKU ORDER BY SKU ASC

SELECT SKU,计数(电子邮件)AS total_previous从各项WHERE支付 IS NOT NULL和created_at < DATE_SUB(NOW(),INTERVAL 1周)和 created_at> = DATE_SUB(NOW(),INTERVAL 2 WEEK)GROUP BY SKU ORDER BY SKU ASC

这里的目标是有1组具有3列,显示的数量的结果记录每个sku在第二列中的一个日期范围以及第三列中相同sku的记录数。

  1. SKU(这里的一切进行分组)
  2. total_current(计算记录#落在第一个查询的日期范围内,对每一个单独的SKU)
  3. total_previous(计算记录#落在第二个查询的那日期范围为每个单独的sku)

结果应按sku升序排序。

我已经尝试了很多不同的事情,使用UNION和JOIN等,但迄今为止没有运气。任何帮助将不胜感激!

回答

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 
+0

有趣 - 我没有看到这样的我所有的搜索解决方案,但是这是有道理的,它会作为工作到目前为止需要。我会把它标记为现在的答案。感谢您及时的回复! – Prattski

+0

@Prattski继续吧。 – Strawberry

相关问题