根据起止时间统计各销售部门首次下单顾客人数及总订单数

bainian 2016-06-30 03:29:43
orders表中有
orderid:订单唯一标识号,
departmentid:部门唯一标识,
corpid:企业顾客唯一标识
orderamount:客户下单金额,
createtime:订单创建日期,

根据起止日期,统计的字段信息如下:
部门、首次下单客户总数、首次下单的总单数、首次下单的总金额、总单数、总订单金额。

注意:
首次下单客户总<首次下单的总单数:会出现很早以前的客户,在起止日期内下了多单。
若存在顾客在起止日期范围内,在不同的部门下单,则计入第一次下单的部门

我在统计首次下单这里找不到好的处理办法,请教各位。
...全文
728 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
团购BUS 2016-08-09
  • 打赏
  • 举报
回复

select corpid,订单日期 as 首单日期,金额 as 首单金额
from (
        select  corpid,date(createtime) as 订单日期,sum(orderamount) as 金额
        from orders as A 
        group by corpid,date(createtime) 
       order by corpid,date(createtime)
) as b # b表根据企业客户 订单日期group by 同时根据这两个字段升序 形成一个子表 然后从子表只依据企业客户group by 取首单
group by
corpid


团购BUS 2016-08-09
  • 打赏
  • 举报
回复

select corpid,金额 as 首单金额
from (
        select  corpid,sum(orderamount) as 金额
        from orders as A 
        group by corpid,date(createtime) 
       order by corpid,date(createtime)
) as b # b表根据企业客户 订单日期group by 同时根据这两个字段升序 形成一个子表 然后从子表只依据企业客户group by 取首单
group by corpid

thanksmyfriend 2016-07-02
  • 打赏
  • 举报
回复
版主给出的方法能可以得到首单的数据。 要得附加上总数据,笨办法是在先得到总数据,再inner join。 版主的方法很简洁,学习了。用子查询也拼接出了结果,但拼接的想吐。
bainian 2016-06-30
  • 打赏
  • 举报
回复
纠正下: 部门6的在算6月份总订单数就不对了,应该是2笔,总金额是200。
bainian 2016-06-30
  • 打赏
  • 举报
回复
谢版主,后面的统计错了。 部门6的在算6月份总订单数就不对了,应该是2笔,总金额是400。 这个统计麻烦就是在即统计新客户下单,又要统计时间范围内的总订单数及金额,就卡在这里的。 期望的结果是如下:


+--------------+----------+------------------+----------+------------------+
| departmentid | count(*) | sum(orderamount) | count(*) | sum(orderamount) |
+--------------+----------+------------------+----------+------------------+
|            2 |        2 |           458.00 |        2 |           458.00 |
|            3 |        1 |           200.00 |        2 |           242.00 |
|            6 |        1 |           100.00 |        2 |           200.00 |
+--------------+----------+------------------+----------+------------------+
3 rows in set (0.00 sec)
ACMAIN_CHM 2016-06-30
  • 打赏
  • 举报
回复
mysql> select * from tmpOrders;
+---------+--------------+--------+-------------+---------------------+
| orderid | departmentid | corpid | orderamount | createtime          |
+---------+--------------+--------+-------------+---------------------+
|      12 |            3 |    999 |      100.00 | 2016-03-10 12:53:23 |
|      23 |            2 |    444 |      158.00 | 2016-06-07 20:42:23 |
|      43 |            3 |    777 |      200.00 | 2016-06-14 18:20:45 |
|      78 |            6 |    555 |      100.00 | 2016-06-23 15:56:23 |
|      34 |            3 |    333 |       42.00 | 2016-06-10 12:20:23 |
|      22 |            2 |    111 |      300.00 | 2016-06-08 14:20:23 |
|      13 |            6 |    444 |      100.00 | 2016-06-12 09:11:33 |
+---------+--------------+--------+-------------+---------------------+
7 rows in set (0.00 sec)

mysql> select departmentid,count(*),sum(orderamount),count(*),sum(orderamount)
    -> from tmpOrders t
    -> where createtime between '2016-06-01' and '2016-06-30 23:59:59'
    -> and not exists (
    ->  select 1 from
    ->  tmpOrders
    ->  where createtime >= '2016-06-01'
    ->  and corpid=t.corpid
    ->  and createtime<t.createtime)
    -> group by departmentid;
+--------------+----------+------------------+----------+------------------+
| departmentid | count(*) | sum(orderamount) | count(*) | sum(orderamount) |
+--------------+----------+------------------+----------+------------------+
|            2 |        2 |           458.00 |        2 |           458.00 |
|            3 |        2 |           242.00 |        2 |           242.00 |
|            6 |        1 |           100.00 |        1 |           100.00 |
+--------------+----------+------------------+----------+------------------+
3 rows in set (0.00 sec)

mysql>
bainian 2016-06-30
  • 打赏
  • 举报
回复
环境:mysql5.6 数据格式如下: create table tmpOrders ( orderid int, departmentid int, corpid int, orderamount DECIMAL(10,2), createtime datetime ); insert into tmpOrders values(12,3,999,100.00,'2016-03-10 12:53:23'); insert into tmpOrders values(23,2,444,158.00,'2016-06-07 20:42:23'); insert into tmpOrders values(43,3,777,200.00,'2016-06-14 18:20:45'); insert into tmpOrders values(78,6,555,100.00,'2016-06-23 15:56:23'); insert into tmpOrders values(34,3,333,42.00,'2016-06-10 12:20:23'); insert into tmpOrders values(22,2,111,300.00,'2016-06-08 14:20:23'); insert into tmpOrders values(13,6,444,100.00,'2016-06-12 09:11:33'); 想得到的结果如下: 开始时间:2016-06-01;截止时间:2016-06-30 部门 客户首次下单总数 首次下单的总金额 总单数 总订单金额 3 2 242 2 242 2 2 458 2 458 6 1 100 1 100 注:若在统计时间范围内存在第一次下单,并且是多次,则将第一次下单的统计到首次下单的部门,其它时间内的下单的不做统计
致命的西瓜 2016-06-30
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧