本文实例讲述了mysql累积聚合原理与用法。分享给大家供大家参考,具体如下:

累积聚合为聚合从序列内第一个元素到当前元素的数据,如为每个员工返回每月开始到现在累积的订单数量和平均订单数量

行号问题有两个解决方案,分别是为使用子查询和使用连接。子查询的方法通常比较直观,可读性强。但是在要求进行聚合时,子查询需要为每个聚合扫描一次数据,而连接方法通常只需要扫描一次就可以得到结果。下面的查询使用连接来得到结果

SELECT a.empid, a.ordermonth,a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b  ON a.empid=b.empid  AND b.ordermonth <= a.ordermonthGROUP BY a.empid,a.ordermonth,a.qtyORDER BY a.empid,a.ordermonth
WHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'

此外可能还需要筛选数据,例如只需要返回每个员工到达某一目标之前每月订单的情况。这里假设统计每个员工的合计订单数量达到1000之前的累积情况。

这里可以使用HAVING过滤器来完成查询

SELECT a.empid, a.ordermonth,a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b  ON a.empid=b.empid  AND b.ordermonth <= a.ordermonthWHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'GROUP BY a.empid,a.ordermonth,a.qtyHAVING total<1000ORDER BY a.empid,a.ordermonth
SELECT a.empid, a.ordermonth,a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b  ON a.empid=b.empid  AND b.ordermonth <= a.ordermonthWHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'GROUP BY a.empid,a.ordermonth,a.qtyHAVING total-a.qty < 1000ORDER BY a.empid,a.ordermonth

如果只想返回达到累积订单数为1000的当月数据,不返回之前的月份,则可以对上述SQL语句

进一步过滤,再添加累积订单数量大于等于1000的条件。该问题的SQL语句如下,

SELECT a.empid, a.ordermonth,a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b  ON a.empid=b.empid  AND b.ordermonth <= a.ordermonthWHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'GROUP BY a.empid,a.ordermonth,a.qtyHAVING total-a.qty < 1000 AND total >= 1000ORDER BY a.empid,a.ordermonth

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。

更多相关文章

  1. 《Android和PHP最佳实践》官方站
  2. android用户界面之按钮(Button)教程实例汇
  3. IM-A820L限制GSM,WCDMA上网的原理(其他泛泰机型可参考)7.13
  4. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  5. Android(安卓)UI开发第十七篇——Android(安卓)Fragment实例(Lis
  6. Android——Activity四种启动模式
  7. Android布局(序章)
  8. Android发送短信方法实例详解
  9. Android(安卓)读取资源文件实例详解

随机推荐

  1. 如何改变这个js的持续时间
  2. jquery.validate.js使用之自定义表单验证
  3. 在each()函数内部调用多个ajax ..然后在完
  4. 在Ajax请求后添加了自闭标记
  5. Jquery:JS弹出窗口DIV层效果
  6. 如何使用ajax GET或POST方法将数据传递到
  7. 如何从SQL SELECT查询中的c#变量创建jQuer
  8. 在Chrome中使用AJAX发送选项而不是GET/PO
  9. jQuery实现点击全选和取消全选
  10. 适用于prettyPhoto的FLV播放器(基于jQuery