我正在尝试构建一个查询,该查询将返回聚合销售数据。我的当前查询返回一个类似于以下内容的表:
----------------------------------
| 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;发布于 2014-12-11 01:12:47
我想你想要的是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中包括该年(这是通过包括整个日期完成的)。今天可能不需要它,但从现在起仅仅三、四个星期就可能证明它是有用的。
发布于 2014-12-11 00:57:06
你可以在左边聚集(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);不过,您有一些非子skus的例子,这使得它更加困难.
https://stackoverflow.com/questions/27413571
复制相似问题