2014-12-11 143 views
0

我正在嘗試構建一個將返回彙總銷售數據的查詢。我目前的查詢將返回類似於下面的表格:MySQL彙總報告

---------------------------------- 
| DATE  | SKU  | TOTAL | 
---------------------------------- 
| 2014-11-10 | AV155_A | 209.00 | 
| 2014-11-10 | AV155_B | 627.00 | 
| 2014-11-10 | AV155_C | 279.00 | 
| 2014-11-10 | AV155 | 279.00 | 
| 2014-11-10 | AV1556_A | 209.00 | 
| 2014-11-10 | AV1556_B | 627.00 | 
| 2014-11-10 | AV1556_C | 279.00 | 
| 2014-11-10 | AV1556 | 279.00 | 

然而,除了具有總計爲每個單獨的SKU,我想每個SKU用相同的相匹配的聚合總的母公司SKU。「在這個例子中,我想要兩個結果,一個彙總「AV1555」的總數和一個彙總「AV1556」的總數。該表應該是這個樣子:

----------------------------------- 
| DATE  | SKU  | TOTAL | 
----------------------------------- 
| 2014-11-10 | AV1555 | 1394.00 | 
| 2014-11-10 | AV1556 | 1394.00 | 

查詢我目前使用的這個樣子的:

select 
    DATE_FORMAT(created_on, '%m-%d-%Y') as date, 
    sku, 
    SUM(price) as total 
FROM order_items 
WHERE created_on between FROM_UNIXTIME(1415577600) AND NOW() 
GROUP BY MONTH(created_on), DAY(v.created_on), order_item_sku; 

回答

2

我想你想要的是substring_index()

select DATE_FORMAT(created_on, '%m-%d-%Y') as date, 
     substring_index(sku, '_', 1) as sku_prefix 
     SUM(price) as total 
FROM order_items 
WHERE created_on between FROM_UNIXTIME(1415577600) AND NOW() 
GROUP BY date(v.created_on), substring_index(sku, '_', 1); 

你還應該包括當年在group by(通過包含整個日期完成)。這可能不是今天需要的,但從現在開始三四周後可能會有用。

+0

好得多。我不能投我自己的帖子,你可以嗎? – 2014-12-11 01:22:00

+0

@SQLHacks。 。 。你的回答是正確的,因爲OP最初表達了它的意思。他/他稍微修改了一下,你絕對不值得讚賞。 – 2014-12-11 02:02:32

0

您可以在LEFT聚集(SKU,6)​​

select 
    DATE_FORMAT(created_on, '%m-%d-%Y') as date, 
    LEFT(sku,6), 
    SUM(price) as total 
FROM order_items 
WHERE created_on between FROM_UNIXTIME(1415577600) AND NOW() 
GROUP BY MONTH(created_on), DAY(v.created_on), LEFT(sku,6); 

如果您的sku可以是可變長度,您可以使用

select 
    DATE_FORMAT(created_on, '%m-%d-%Y') as date, 
    LEFT(sku,LEN(sku)-2), 
    SUM(price) as total 
FROM order_items 
WHERE created_on between FROM_UNIXTIME(1415577600) AND NOW() 
GROUP BY MONTH(created_on), DAY(v.created_on), LEFT(sku,LEN(sku)-2); 

但是你必須與非獨生子女的SKU一些例子,這使得它一大堆麻煩了...

+0

這很好!但是,如果我的SKU長度可變,該怎麼辦? (他們是,我會更新我的示例表來反映) – 2014-12-11 01:01:00

+0

MySQL中有一堆字符串函數。你如何發現孩子skus? – 2014-12-11 01:08:58

+0

孩子skus總是有一個下劃線,然後一個字母 – 2014-12-11 01:12:24