如果想在下面这个表下面添加一行 总计 数据行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相关推荐

  1. mysql有rollup函数吗_MySQL-with rollup函数运用 _20160930

    标签: 如果想在下面这个表下面添加一行 总计 数据行SQL代码怎么实现 并且根据9月金额进行城市降序 总计置于底部呢 MySQL提供了 group by with rollup 函数进行group b ...

  2. mysql rollup函数_Mysql,Oracle使用rollup函数完成行列统计

    昨天突然在 一篇博客中看到了Mysql也有rollup函数,原博文使用了rollup进行行列统计,原博文链接如下: 本博文主要是记录下mysql和oracle使用rollup函数进行行列统计,内容比较 ...

  3. Mysql学习-group by with rollup 函数 和order by field()自定义排序函数

    今天看到同事的代码,学习到了 group by with rollup 函数 和order by field()自定义排序函数 group by with rollup 函数 文章地址 https:/ ...

  4. MySQL基础篇:单行函数

    概述 MySQL数据库提供了很多函数包括: 数学函数 字符串函数 日期和时间函数 条件判断函数 流程控制函数 系统信息函数 加密函数 格式化函数 数学函数 函数名称 函数说明 ABS(x) 返回x的绝 ...

  5. MySQL中常见的单行函数(下)

    MySQL中常见的单行函数(下) 一.转换函数 Date_format(date,format) 将日期转换成字符串(类似Oracle中的to_char()) Str_to_date(str,fo ...

  6. 【SQL编程】Greenplum 与 MySQL 数据库获取周几函数及函数结果保持一致的方法

    1.问题说明 项目有两个不同的平台分别使用 Greenplum 和 MySQL 数据库,但是这两个数据库的函数是不相同的,所以需要维护两套查询 SQL. 2.根据周几获取数据 2.1 原始函数结果 M ...

  7. mariadb mysql 语法_Mariadb MySQL、Mariadb中GROUP_CONCAT函数使用介绍

    MySQL.Mariadb中GROUP_CONCAT 函数使用介绍 By:授客 QQ:1033553122 语法: GROUP_CONCAT([DISTINCT] column_name [ORDER ...

  8. MySQL之日期时间处理函数_MySQL之日期时间处理函数

    本文给大家分享的是MySQL之日期时间处理函数 ,非常的详细,也很实用,非常适合初学者,有需要的小伙伴参考下. 以下基本包含MySQL所有日期时间函数-- MySQL日期时间处理函数 -- 当前日期: ...

  9. mysql 昨天日期_MySQL 日期函数 今天明天昨天......

    MySQL 获得当前日期时间 函数 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | n ...

  10. startindex 不能大于字符串长度_「12」学习MySQL第二类函数:字符串函数

    前一篇文章总结了下MySQL中常用的数学函数,本文接下来的重点就是认识"字符串函数". 上图这匹漂亮的马儿就是通过各种字符(字母.括号.逗号.竖线等)画出来的.我不由自主地会去想下 ...

最新文章

  1. 如何运用深度强化学习,让机器人运动更灵活智能?
  2. html js json数据解析后台数据包_如何将html解析为有关联的json数据?htmlparser2模块使用详解...
  3. C 和 C++ 文件操作详解
  4. mysql事务回滚后,自增ID仍然增加
  5. Maven工作笔记-jar包打入本地仓库并打包
  6. zzulioj 1120: 最值交换
  7. 嵌入式wifi 芯片 推荐_人工智能对汽车芯片设计的影响
  8. 技术竞争力之Web技术方向
  9. BestCoder15 1002.Instruction(hdu 5083) 解题报告
  10. NYOJ--12--喷水装置(二)
  11. python:删除DataFrame中某列值为NaN的记录/行
  12. python将txt转为字符串_一文搞懂Python文件读写
  13. OPPO A37M刷机
  14. UML建模:基于智慧校园的二手交易平台
  15. OpenCV 单目摄像头(python版)
  16. Head First Java 中文高清版 免费分享
  17. 维基百科Wikipedia镜像网站列表
  18. 接口地址没错但是报404
  19. WPF3D图片轮播效果
  20. フローのパラメータについて

热门文章

  1. 快手用户群体分析_报告称快手用户分布与移动互联网人群分布一致
  2. 魔鬼训练Day2作业
  3. linux恢复树莓派内存卡容量,找回树莓派SD卡剩余空间
  4. 【AI视野·今日CV 计算机视觉论文速览 第224期】Tue, 22 Jun 2021
  5. linux安装谷歌浏览器(Chrome)
  6. 工程量计算稿1.54安装教程 v1.54pjb
  7. 华硕幻16、酷睿12代、windows11、vmware折腾总结
  8. linux中安装rpm命令,linux下,如何安装rpm命令?
  9. 遇到数学问题《深度学习》“花书”读不下去了吗?给你支个招
  10. C语言选择循环练习题