Mysql分组查询group by与with rollup方式

 更新时间:2023年08月15日 15:11:30   作者:浮生醉梦zuozs  
这篇文章主要介绍了Mysql分组查询group by与with rollup方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Mysql分组查询group by与with rollup

当用select*from 表名 group by‘字段名1’将选出来的内容将按照字段1分组,其他列不尽相同,会以最前面的内容显示:

GROUP BY 后面可以跟多个列名,表示以多列作为分组依据:

mysql> select `name`,`date`,count(*) from `employee_tbl` group by `name`,date;
+------+---------------------+----------+
| name | date                | count(*) |
+------+---------------------+----------+
| 小丽 | 2016-04-19 15:26:02 |        1 |
| 小明 | 2016-04-04 15:26:54 |        1 |
| 小明 | 2016-04-11 15:26:40 |        1 |
| 小明 | 2016-04-22 15:25:33 |        1 |
| 小王 | 2016-04-07 15:26:14 |        1 |
| 小王 | 2016-04-20 15:25:47 |        1 |
+------+---------------------+----------+
6 rows in set (0.05 sec)

group by 后可以跟with  rollup,表示在进行分组统计的基础上再次进行汇总统计(在每个分组下都会有统计汇总):

 
mysql> select*from r;
+------+-----+------+
| name | cat | fish |
+------+-----+------+
| 小明 | x   | 1    |
| 小明 | x   | 2    |
| 小明 | x   | 4    |
| 小明 | y   | 2    |
| 小明 | y   | 2    |
| 小明 | z   | 1    |
| 小红 | x   | 1    |
| 小红 | x   | 3    |
| 小红 | y   | 1    |
| 小红 | y   | 2    |
| 小青 | y   | 3    |
| 小青 | z   | 2    |
| 小青 | z   | 1    |
+------+-----+------+
13 rows in set (0.05 sec)
mysql> select name,cat,fish,count(*) from r group by name with rollup;
+------+-----+------+----------+
| name | cat | fish | count(*) |
+------+-----+------+----------+
| 小红 | x   | 1    |        4 |
| 小明 | x   | 1    |        6 |
| 小青 | y   | 3    |        3 |
| NULL | y   | 3    |       13 |
+------+-----+------+----------+
4 rows in set (0.05 sec)
mysql> select name,cat,fish,count(*) from r group by name,cat with rollup;
+------+------+------+----------+
| name | cat  | fish | count(*) |
+------+------+------+----------+
| 小红 | x    | 1    |        2 |
| 小红 | y    | 1    |        2 |
| 小红 | NULL | 1    |        4 |
| 小明 | x    | 1    |        3 |
| 小明 | y    | 2    |        2 |
| 小明 | z    | 1    |        1 |
| 小明 | NULL | 1    |        6 |
| 小青 | y    | 3    |        1 |
| 小青 | z    | 2    |        2 |
| 小青 | NULL | 2    |        3 |
| NULL | NULL | 2    |       13 |
+------+------+------+----------+
11 rows in set (0.06 sec)
mysql> select name,cat,fish,count(*) from r group by name,cat,fish with rollup;
+------+------+------+----------+
| name | cat  | fish | count(*) |
+------+------+------+----------+
| 小红 | x    | 1    |        1 |
| 小红 | x    | 3    |        1 |
| 小红 | x    | NULL |        2 |
| 小红 | y    | 1    |        1 |
| 小红 | y    | 2    |        1 |
| 小红 | y    | NULL |        2 |
| 小红 | NULL | NULL |        4 |
| 小明 | x    | 1    |        1 |
| 小明 | x    | 2    |        1 |
| 小明 | x    | 4    |        1 |
| 小明 | x    | NULL |        3 |
| 小明 | y    | 2    |        2 |
| 小明 | y    | NULL |        2 |
| 小明 | z    | 1    |        1 |
| 小明 | z    | NULL |        1 |
| 小明 | NULL | NULL |        6 |
| 小青 | y    | 3    |        1 |
| 小青 | y    | NULL |        1 |
| 小青 | z    | 1    |        1 |
| 小青 | z    | 2    |        1 |
| 小青 | z    | NULL |        2 |
| 小青 | NULL | NULL |        3 |
| NULL | NULL | NULL |       13 |
+------+------+------+----------+
23 rows in set (0.07 sec)
mysql> select name,cat,fish,sum(fish) from r group by name with rollup;
+------+-----+------+-----------+
| name | cat | fish | sum(fish) |
+------+-----+------+-----------+
| 小红 | x   | 1    |         7 |
| 小明 | x   | 1    |        12 |
| 小青 | y   | 3    |         6 |
| NULL | y   | 3    |        25 |
+------+-----+------+-----------+
4 rows in set (0.05 sec)
mysql> select name,cat,fish,sum(fish) from r group by name,cat with rollup;
+------+------+------+-----------+
| name | cat  | fish | sum(fish) |
+------+------+------+-----------+
| 小红 | x    | 1    |         4 |
| 小红 | y    | 1    |         3 |
| 小红 | NULL | 1    |         7 |
| 小明 | x    | 1    |         7 |
| 小明 | y    | 2    |         4 |
| 小明 | z    | 1    |         1 |
| 小明 | NULL | 1    |        12 |
| 小青 | y    | 3    |         3 |
| 小青 | z    | 2    |         3 |
| 小青 | NULL | 2    |         6 |
| NULL | NULL | 2    |        25 |
+------+------+------+-----------+
11 rows in set (0.06 sec)
mysql> select name,cat,fish,sum(fish) from r group by name,cat,fish with rollup;
+------+------+------+-----------+
| name | cat  | fish | sum(fish) |
+------+------+------+-----------+
| 小红 | x    | 1    |         1 |
| 小红 | x    | 3    |         3 |
| 小红 | x    | NULL |         4 |
| 小红 | y    | 1    |         1 |
| 小红 | y    | 2    |         2 |
| 小红 | y    | NULL |         3 |
| 小红 | NULL | NULL |         7 |
| 小明 | x    | 1    |         1 |
| 小明 | x    | 2    |         2 |
| 小明 | x    | 4    |         4 |
| 小明 | x    | NULL |         7 |
| 小明 | y    | 2    |         4 |
| 小明 | y    | NULL |         4 |
| 小明 | z    | 1    |         1 |
| 小明 | z    | NULL |         1 |
| 小明 | NULL | NULL |        12 |
| 小青 | y    | 3    |         3 |
| 小青 | y    | NULL |         3 |
| 小青 | z    | 1    |         1 |
| 小青 | z    | 2    |         2 |
| 小青 | z    | NULL |         3 |
| 小青 | NULL | NULL |         6 |
| NULL | NULL | NULL |        25 |
+------+------+------+-----------+
23 rows in set (0.07 sec)

Mysql分组查询统计每个选项的数量

帮客户做个问卷调查,最后需要统计每道问题的每个选项的数量。

思路是先按问题分组,然后使用case语句区分每个选项,然后做统计。

SQL语句如下:

SELECT
	examQuestionId,
	SUM(CASE WHEN answer='非常同意' then 1 else 0 end) as '非常同意',
	SUM(CASE WHEN answer='有点同意' then 1 else 0 end) as '有点同意',
	SUM(CASE WHEN answer='中立' then 1 else 0 end) as '中立',
	SUM(CASE WHEN answer='有点不同意' then 1 else 0 end) as '有点不同意',
	SUM(CASE WHEN answer='非常不同意' then 1 else 0 end) as '非常不同意'
FROM
	bm_exam_paper_question
GROUP BY
	examQuestionId
ORDER BY
	examQuestionId

执行效果如下:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 彻底弄懂Python中的回调函数(callback)

    彻底弄懂Python中的回调函数(callback)

    回调函数就是一个通过函数指针调用的函数,下面这篇文章主要给大家介绍了关于Python中回调函数(callback)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • python中response.text 和response.content的区别详解

    python中response.text 和response.content的区别详解

    这篇文章主要介绍了python中response.text 和response.content的区别详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python数据分析matplotlib设置多个子图的间距方法

    Python数据分析matplotlib设置多个子图的间距方法

    今天小编就为大家分享一篇Python数据分析matplotlib设置多个子图的间距方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Python3安装tensorflow及配置过程

    Python3安装tensorflow及配置过程

    TensorFlow 是一个端到端开源机器学习平台,能够帮助开发者快速轻松的构建和部署由机器学习提供应用,对Python3安装tensorflow的相关知识感兴趣的朋友一起学习下吧
    2021-05-05
  • python多线程实现同时执行两个while循环的操作

    python多线程实现同时执行两个while循环的操作

    这篇文章主要介绍了python多线程实现同时执行两个while循环的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境

    利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境

    这篇文章主要介绍了利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 一篇文章彻底弄懂Python中的if __name__ == __main__

    一篇文章彻底弄懂Python中的if __name__ == __main__

    在Python当中如果代码写得规范一些,通常会写上一句if '__name__'=='__main__:'作为程序的入口,下面这篇文章主要给大家介绍了关于如何通过一篇文章彻底弄懂Python中的if __name__ == __main__的相关资料,需要的朋友可以参考下
    2022-12-12
  • Python使用PIL库实现验证码图片的方法

    Python使用PIL库实现验证码图片的方法

    这篇文章主要介绍了Python使用PIL库实现验证码图片的方法,结合实例形式较为详细的分析了Python基于PIL库生成验证码图片的相关技巧与注意事项,需要的朋友可以参考下
    2016-03-03
  • Pandas DataFrame中的tuple元素遍历的实现

    Pandas DataFrame中的tuple元素遍历的实现

    这篇文章主要介绍了Pandas DataFrame中的tuple元素遍历的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python采集大学教务系统成绩单实战示例

    Python采集大学教务系统成绩单实战示例

    这篇文章主要为大家介绍了Python采集大学教务系统成绩单实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论