mysql with rollup_MySQL-with rollup函数运用 _20160930
如果想在下面这个表下面添加一行 总计 数据行SQL代码怎么实现 并且根据9月金额进行城市降序 总计置于底部呢
MySQL提供了 group by with rollup 函数进行group by 字段的汇总
但是order by 互斥的不能同时用
第一步还是是先计算各城市每个月的金额
SELECT b.城市,SUM(IF(b.年月=201607,b.金额,NULL)) AS 7月金额,SUM(IF(b.年月=201608,b.金额,NULL)) AS 8月金额,SUM(IF(b.年月=201609,b.金额,NULL)) AS9月金额FROM(SELECT city AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS金额FROM test_a03order ASaGROUP BY city,DATE_FORMAT(order_time,"%Y%m")
)ASbGROUP BY b.城市
第二步我们先用group by with rollup 函数添加针对字段的汇总
SELECT b.城市,SUM(IF(b.年月=201607,b.金额,NULL)) AS 7月金额,SUM(IF(b.年月=201608,b.金额,NULL)) AS 8月金额,SUM(IF(b.年月=201609,b.金额,NULL)) AS9月金额FROM(SELECT city AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS金额FROM test_a03order ASaGROUP BY city,DATE_FORMAT(order_time,"%Y%m")
)ASbGROUP BY b.城市 WITH ROLLUP
这个记录没有出现总计两个字,怎么实现呢 继续修改代码 ifnull()函数
第三 添加总计字样(有坑) ifnull()函数是将空字段另外命名
SELECT IFNULL(b.城市,"总计") AS 城市,SUM(IF(b.年月=201607,b.金额,NULL)) AS 7月金额,SUM(IF(b.年月=201608,b.金额,NULL)) AS 8月金额,SUM(IF(b.年月=201609,b.金额,NULL)) AS9月金额FROM(SELECT city AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS金额FROM test_a03order ASaGROUP BY city,DATE_FORMAT(order_time,"%Y%m")
)ASbGROUP BY b.城市 WITH ROLLUP
第四 摆脱掉坑
为什么说有坑呢 如果ifnull()函数放在上面代码位置 看似实现了总计的字样 ifnull()是针对用了with rollup 函数总计这个位置出现空字段时候修改它为总计字样的,
如果城市这一列里本身就含有没有命名的城市呢 这一列就会出现多个总计字样 因此我们需要将ifnull()函数放到嵌套的子表里 将空字段在子表里面就预先改成别名(不能是总计字样)
因此 使用2个ifnull()函数就不会有这样的问题 结果是一样的
SELECT IFNULL(b.城市,"总计") AS 城市,SUM(IF(b.年月=201607,b.金额,NULL)) AS 7月金额,SUM(IF(b.年月=201608,b.金额,NULL)) AS 8月金额,SUM(IF(b.年月=201609,b.金额,NULL)) AS9月金额FROM(SELECT IFNULL(city,'空城市') AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS金额FROM test_a03order ASaGROUP BY city,DATE_FORMAT(order_time,"%Y%m")
)ASbGROUP BY b.城市 WITH ROLLUP
第五 排序
在这篇博客http://www.cnblogs.com/Mr-Cxy/p/5910291.html 提到了order by field()自定义排序函数 如下图红框所示有这样一个默认的自定义排序规则
因此 如果想实现 根据9月金额进行城市降序 总计置于底部 效果 可以把上面代码当成一个子表嵌套 结合 order by field()自定义函数实现
SELECT c.*
FROM(SELECT IFNULL(b.城市,"总计") AS 城市,SUM(IF(b.年月=201607,b.金额,NULL)) AS 7月金额,SUM(IF(b.年月=201608,b.金额,NULL)) AS 8月金额,SUM(IF(b.年月=201609,b.金额,NULL)) AS9月金额FROM(SELECT IFNULL(city,'空城市') AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS金额FROM test_a03order ASaGROUP BY city,DATE_FORMAT(order_time,"%Y%m")
)ASbGROUP BY b.城市 WITHROLLUP
)AScORDER BY FIELD(城市,'总计'),c.9月金额 DESC
mysql with rollup_MySQL-with rollup函数运用 _20160930相关推荐
- mysql有rollup函数吗_MySQL-with rollup函数运用 _20160930
标签: 如果想在下面这个表下面添加一行 总计 数据行SQL代码怎么实现 并且根据9月金额进行城市降序 总计置于底部呢 MySQL提供了 group by with rollup 函数进行group b ...
- mysql rollup函数_Mysql,Oracle使用rollup函数完成行列统计
昨天突然在 一篇博客中看到了Mysql也有rollup函数,原博文使用了rollup进行行列统计,原博文链接如下: 本博文主要是记录下mysql和oracle使用rollup函数进行行列统计,内容比较 ...
- Mysql学习-group by with rollup 函数 和order by field()自定义排序函数
今天看到同事的代码,学习到了 group by with rollup 函数 和order by field()自定义排序函数 group by with rollup 函数 文章地址 https:/ ...
- MySQL基础篇:单行函数
概述 MySQL数据库提供了很多函数包括: 数学函数 字符串函数 日期和时间函数 条件判断函数 流程控制函数 系统信息函数 加密函数 格式化函数 数学函数 函数名称 函数说明 ABS(x) 返回x的绝 ...
- MySQL中常见的单行函数(下)
MySQL中常见的单行函数(下) 一.转换函数 Date_format(date,format) 将日期转换成字符串(类似Oracle中的to_char()) Str_to_date(str,fo ...
- 【SQL编程】Greenplum 与 MySQL 数据库获取周几函数及函数结果保持一致的方法
1.问题说明 项目有两个不同的平台分别使用 Greenplum 和 MySQL 数据库,但是这两个数据库的函数是不相同的,所以需要维护两套查询 SQL. 2.根据周几获取数据 2.1 原始函数结果 M ...
- mariadb mysql 语法_Mariadb MySQL、Mariadb中GROUP_CONCAT函数使用介绍
MySQL.Mariadb中GROUP_CONCAT 函数使用介绍 By:授客 QQ:1033553122 语法: GROUP_CONCAT([DISTINCT] column_name [ORDER ...
- MySQL之日期时间处理函数_MySQL之日期时间处理函数
本文给大家分享的是MySQL之日期时间处理函数 ,非常的详细,也很实用,非常适合初学者,有需要的小伙伴参考下. 以下基本包含MySQL所有日期时间函数-- MySQL日期时间处理函数 -- 当前日期: ...
- mysql 昨天日期_MySQL 日期函数 今天明天昨天......
MySQL 获得当前日期时间 函数 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | n ...
- startindex 不能大于字符串长度_「12」学习MySQL第二类函数:字符串函数
前一篇文章总结了下MySQL中常用的数学函数,本文接下来的重点就是认识"字符串函数". 上图这匹漂亮的马儿就是通过各种字符(字母.括号.逗号.竖线等)画出来的.我不由自主地会去想下 ...
最新文章
- 如何运用深度强化学习,让机器人运动更灵活智能?
- html js json数据解析后台数据包_如何将html解析为有关联的json数据?htmlparser2模块使用详解...
- C 和 C++ 文件操作详解
- mysql事务回滚后,自增ID仍然增加
- Maven工作笔记-jar包打入本地仓库并打包
- zzulioj 1120: 最值交换
- 嵌入式wifi 芯片 推荐_人工智能对汽车芯片设计的影响
- 技术竞争力之Web技术方向
- BestCoder15 1002.Instruction(hdu 5083) 解题报告
- NYOJ--12--喷水装置(二)
- python:删除DataFrame中某列值为NaN的记录/行
- python将txt转为字符串_一文搞懂Python文件读写
- OPPO A37M刷机
- UML建模:基于智慧校园的二手交易平台
- OpenCV 单目摄像头(python版)
- Head First Java 中文高清版 免费分享
- 维基百科Wikipedia镜像网站列表
- 接口地址没错但是报404
- WPF3D图片轮播效果
- フローのパラメータについて
热门文章
- 快手用户群体分析_报告称快手用户分布与移动互联网人群分布一致
- 魔鬼训练Day2作业
- linux恢复树莓派内存卡容量,找回树莓派SD卡剩余空间
- 【AI视野·今日CV 计算机视觉论文速览 第224期】Tue, 22 Jun 2021
- linux安装谷歌浏览器(Chrome)
- 工程量计算稿1.54安装教程 v1.54pjb
- 华硕幻16、酷睿12代、windows11、vmware折腾总结
- linux中安装rpm命令,linux下,如何安装rpm命令?
- 遇到数学问题《深度学习》“花书”读不下去了吗?给你支个招
- C语言选择循环练习题