2016-04-29 61 views
1

我有以下SQL查詢:MySQL的 - 組由空值

SELECT date_format(sfo.shipping_arrival_date,"%m.%Y") AS Month, 
     date_format(sfo.shipping_arrival_date,"%v") AS Week, 
     date_format(sfo.shipping_arrival_date,"%d.%m.%Y") AS Shipping Day, 
     CASE 
      WHEN sfo.coupon_code IS NOT NULL THEN sfo.coupon_code 
      ELSE 'no Code' 
     END as Coupon, 
     sfo.coupon_rule_name, 
     sfo.grand_total AS Endsumme, 
     sfo.base_subtotal + sfo.shipping_incl_tax AS Sum_Incl_Shipping, 
     sfo.discount_amount, 
     count(sfo.entity_id) AS uses 
FROM sales_flat_order AS sfo 
WHERE sfo.status <> 'canceled' 
GROUP BY Coupon 
ORDER BY sfo.shipping_arrival_date DESC 

在sfo.coupon_code是現有值「NULL」,但查詢不一一列舉了在結果「無碼」。我想要一個分組優惠券代碼和相關值的列表。

有人知道我爲什麼在結果中找不到「無代碼」的值嗎?

謝謝。

+0

結果是什麼?它是否在優惠券中返回相同的空值? – sravs

+0

如果您省略了GROUP BY子句,那麼您是否收到帶有「無代碼」的coupon_code的結果?您可能在此結果集中沒有NULL值。 –

+0

結果集中沒有「無代碼」。當我刪除group by子句時,我看到一行使用「無代碼」,但其他列都是空的。 – Torben

回答

0

我的預感是,coupon_codeNULL值只有sfo.status = NULL的記錄,這些記錄在結果集中省略。

嘗試用下面的查詢:

SELECT date_format(sfo.shipping_arrival_date,"%m.%Y") AS Month, 
     date_format(sfo.shipping_arrival_date,"%v") AS Week, 
     date_format(sfo.shipping_arrival_date,"%d.%m.%Y") AS Shipping Day, 
     CASE 
      WHEN sfo.coupon_code IS NOT NULL THEN sfo.coupon_code 
      ELSE 'no Code' 
     END as Coupon, 
     sfo.coupon_rule_name, 
     sfo.grand_total AS Endsumme, 
     sfo.base_subtotal + sfo.shipping_incl_tax AS Sum_Incl_Shipping, 
     sfo.discount_amount, 
     count(sfo.entity_id) AS uses 
FROM sales_flat_order AS sfo 
WHERE sfo.status <> 'canceled' OR sfo.status IS NULL 
GROUP BY Coupon 
ORDER BY sfo.shipping_arrival_date DESC 
0

我會使用,而不是一個CASE COALESCE ...

... 
COALESCE(sfo.coupon_code,'no Code') AS Coupon 
... 
GROUP BY Coupon 

...因爲COALESCE表達是CASE表達式語法上的快捷方式因此更清晰簡潔