mysql有rollup函数吗_MySQL-with rollup函数运用
如果想在下面这个表下面添加一行 总计 数据行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)) AS 9月金额
FROM (
SELECT city AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS 金额
FROM test_a03order AS a
GROUP BY city,DATE_FORMAT(order_time,"%Y%m")
) AS b
GROUP 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)) AS 9月金额
FROM (
SELECT city AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS 金额
FROM test_a03order AS a
GROUP BY city,DATE_FORMAT(order_time,"%Y%m")
) AS b
GROUP 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)) AS 9月金额
FROM (
SELECT city AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS 金额
FROM test_a03order AS a
GROUP BY city,DATE_FORMAT(order_time,"%Y%m")
) AS b
GROUP 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)) AS 9月金额
FROM (
SELECT IFNULL(city,'空城市') AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS 金额
FROM test_a03order AS a
GROUP BY city,DATE_FORMAT(order_time,"%Y%m")
) AS b
GROUP 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)) AS 9月金额
FROM (
SELECT IFNULL(city,'空城市') AS 城市,DATE_FORMAT(order_time,"%Y%m") AS 年月,SUM(pay_money) AS 金额
FROM test_a03order AS a
GROUP BY city,DATE_FORMAT(order_time,"%Y%m")
) AS b
GROUP BY b.城市 WITH ROLLUP
) AS c
ORDER BY FIELD(城市,'总计'),c.9月金额 DESC
mysql有rollup函数吗_MySQL-with rollup函数运用相关推荐
- mysql的字符串函数大全_MySQL的字符串函数大全
ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. mysql> select ASCII('2'); -& ...
- mysql时间函数now()_MySQL中时间函数NOW()和SYSDATE()的区别
mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...
- mysql相隔多长时间_Mysql 计算时间间隔函数
mysql计算时间差函数 MySql计算两个日期的时间差函数TIMESTAMPDIFF用法,只要用一句SQL语句就可以办到了. MySql计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法 ...
- mysql group语句可以排序_MySQL中group_concat()函数的排序方法
示例一 group_concat()函数的参数是可以直接使用order by排序,下面通过例子来说明,首先看下面的t1表. 比如,我们要查看每个人的多个分数,将该人对应的多个分数显示在一起,分数要从高 ...
- mysql数据库对时间的函数吗_mysql 数据库 时间函数
取得当天: SELECT curdate(); mysql> SELECT curdate(); +------------+ | curdate() | +------------+ | 20 ...
- mysql concat键值对_MySQL中concat函数
一. concat()函数 1. 含义: 将多个字符串连接成一个字符串. 2. 语法: concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返 ...
- mysql里concat什么意思_mysql里concat函数和 ‘’|‘’ 符号一起用是表示什么?
比如像这种:concat(t4.name,t4.pinyin,t1.trader)|t4.name concat为mysql拼接函数. "|"表示按位或.按位或运算时,数据库系统会 ...
- mysql 函数 局部变量_MySQL 存储过程 存储函数 局部变量 游标 概念示例
一个存储过程是一个可编程的函数,它可以在MySQL中创建并保存.它是由一些SQL语句和一些特殊的控制结构语句组成. 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定的功能时,存储过程是一个非 ...
- mysql uuid_short 为什么不存在_MySQL内置函数uuid和uuid_short
有同学问到MySQL的uuid这个函数.简要介绍一下. 用法 简单看到,这个值,每次执行都是不同的. 生成规则 第1 2 3 段是与时间有关的. time_low.time_mid.time_high ...
- mysql时间函数总结_MySQL 日期时间函数常用总结
获得当前日期+时间(date + time)1.1 函数:now() 相关函数:current_timestamp(),localtime(),localtimestamp() 举例说明: 2. ...
最新文章
- Python 笔试面试合集
- 模式6--ReadWriteLock
- 【青少年编程(第31周)】一个有趣又有料的抖音号!
- JavaScript DOM编程艺术学习笔记(一)
- 【Java】Java反射调用可变参数的方法
- 从零开始学习Sencha Touch MVC应用之十四
- yolov5模型框架详解
- uniapp编译成小程序代码过大的处理方法
- php旧物交易开源代码_PHP学习笔记:php二手交易市场系统
- 基于OpenCV与MFC的人脸识别
- chrome哪个版本最好用_我拥有哪个版本的Chrome?
- 1999-2018年地级市经济增长数据(GDP、人均GDP、各产业产值占比等)
- 暑期作息时间表模板_2015中学生暑假作息时间表模板
- h264视频与pcm音频合成MP4视频格式
- AI智能视频分析系统提升水泥厂安全监管解决方案
- 强柱的治疗目标_24周疗效预测因素
- Skia深入分析6——skia中图像编解码代码概述
- 百度地图API基础操作--百度鹰眼篇
- 从0到1,搭建离线下载器
- am335x+wm8960音频基于linux 4.9.41移植