首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL汇总报告

MySQL汇总报告
EN

Stack Overflow用户
提问于 2014-12-11 00:48:41
回答 2查看 129关注 0票数 0

我正在尝试构建一个查询,该查询将返回聚合销售数据。我的当前查询返回一个类似于以下内容的表:

代码语言:javascript
复制
----------------------------------
| 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‘的总计。这张桌子应该是这样的:

代码语言:javascript
复制
-----------------------------------
| DATE       | SKU      | TOTAL   | 
-----------------------------------
| 2014-11-10 | AV1555   | 1394.00 |
| 2014-11-10 | AV1556   | 1394.00 |

我目前使用的查询如下所示:

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-11 01:12:47

我想你想要的是substring_index()

代码语言:javascript
复制
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中包括该年(这是通过包括整个日期完成的)。今天可能不需要它,但从现在起仅仅三、四个星期就可能证明它是有用的。

票数 2
EN

Stack Overflow用户

发布于 2014-12-11 00:57:06

你可以在左边聚集(sku,6)

代码语言:javascript
复制
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可以是可变长度,您可以使用

代码语言:javascript
复制
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的例子,这使得它更加困难.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27413571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档