2014-12-11 94 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