2017-10-14 74 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

相關問題