又到了周末,而且又是七夕佳节,然而这跟我基本没有关系,作为单身狗的程序员只有与代码作乐。本周发生的事情有点多,产品需求变更改代码!!!新来的小伙伴开发零输出!!!接盘接盘!!!虽然周末不需要加班,但是想到下周的与前端联调,项目提测就一顿头大!!!

好了废话不多说了,这周继续写关于mysql的问题,这周就写一下聚合和旋转吧,所谓聚合就是聚合函数,而旋转所涉及的是行列转换问题。

常见的聚合函数:

mysql常见的聚合大概就是上图所画的几种,此处抽离出了一个可能不太常见的GROUP_CONCAT聚合,GROUP_CONCAT聚合具体是什么呢?下面会单独写个demo分析一下,至于其他的聚合函数在此就不做演示。

GROUP_CONCAT:

GROUP_CONCAT此函数代表的将此列拼接,应用场景,伴随分组使用。

给出一个order表:

CREATE TABLE `orders` (  `oname` varchar(50) COLLATE utf8_bin NOT NULL,  `cnum` varchar(30) COLLATE utf8_bin NOT NULL,  `onum` varchar(50) COLLATE utf8_bin NOT NULL,  `create_time` datetime NOT NULL,  `update_time` datetime NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

要求统计出每一个客户下面的所有订单号?此时就可以用到我们的group_concat函数了,sql示例如下:

SELECT cnum,GROUP_CONCAT(onum) AS 'ordernums' FROM orders GROUP BY cnum;

结果如下:

是不是很简单?在此不做过多展开。

pivoting是mysql的一个行旋转为列的技术,也即是我们常说的行列转换,行列转换通常需要用的聚合、分组等技术。

给出一个需要行列转换的数据的表:

需求:统计出每年每月的销量。

SELECT year '年份',             SUM(CASE WHEN mouth = 1 THEN account ELSE 0 END) '一月',             SUM(CASE WHEN mouth = 2 THEN account ELSE 0 END) '二月',             SUM(CASE WHEN mouth = 3 THEN account ELSE 0 END) '三月' FROM sellnumber GROUP BY year;

女神回归!!!!