代码编织梦想

GROUP BY 的基本使用

使用GROUP BY将表中的数据分为若干组。

  1. 查询整个公司的平均工资。
# 查询整个公司的平均工资
SELECT AVG(salary)
FROM employees; -- 返回6461.682243
  1. 查询各个部门的平均工资。
# 查询各个部门的平均工资
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id; -- 返回12行记录
  1. 查询各个工种的平均工资。
# 查询各个工种的平均工资
SELECT job_id,AVG(salary)
FROM employees
GROUP BY job_id; -- 返回19行记录

GROUP BY 多列分组,用逗号隔开

GROUP BY 多列分组,用逗号隔开。

  1. 查询各个部门中各个工种(或者各个工种中各个部门)的平均工资
# 查询各个部门中各个工种的平均工资
SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id,job_id; -- 返回20行记录

# 查询各个工种中的各个部门的平均工资
SELECT job_id,department_id,AVG(salary)
FROM employees
GROUP BY job_id,department_id; -- 返回20行记录

使用GORUP BY时的注意点

  1. SELECT中出现的非组函数必须声明在GROUP BY中,而GROUP BY中声明的字段可以不出现在SELECT中。
# SELECT中出现的非组函数必须出现在GROUP BY中
SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id,job_id;

# GROUP BY中声明的字段可以不出现在SELECT中
SELECT AVG(salary)
FROM employees
GROUP BY department_id,job_id;

# 错误的示例
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id,job_id; -- MySQL虽然没有报错,但数据依然不正确。Orcal中会直接报错。
  1. GROUP BY的位置:SELECT...FROM...WHERE...GROUP BY...ORDER BY...LIMIT...
# 查询各个部门的平均工资,且按照平均工资从低到高排序
SELECT department_id,AVG(salary) avg_sal
FROM employees
GROUP BY department_id
ORDER BY avg_sal ASC;

GROUP BY中使用WITH ROLLUP

使用WITH ROLLUP关键字后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和。

# 查询整个公司的平均工资
SELECT AVG(salary)
FROM employees; -- 返回6461.682243

# 查询各个部门的平均工资
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id; -- 返回12行记录

# 查询各个部门的平均工资
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id
WITH ROLLUP; -- 返回13行记录,且最后一条记录的数值是6461.682243,即整个公司的平均工资

注意,当使用WITH ROLLUP时,不能同时使用ORDER BY进行结果排序。也就是说,WITH ROLLUPORDER BY是互相排斥的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qzw752890913/article/details/126413531

c# list 使用groupby分组-爱代码爱编程

根据论坛及博客整理。 原有list集合, List<CommodityInfo> commodityInfoList = new List<CommodityInfo>(); public class CommodityInfo { public string StoreID {get; set

mysql使用group by分组实现取前n条记录的方法或最近几条消费记录_dn_xiaoxiao的博客-爱代码爱编程

mysql使用GROUP BY分组实现取前N条记录的方法  更新时间:2016年06月24日 11:25:48   作者:yiluoAK_47    我要评论 关注脚本之家微信公众号(jb51net) 每周都有大礼相送哦 这篇文章主要介绍了mysql使用GROUP BY分组实现取前N条记录的方法,结合实例形式较为详细的分析了mysql中GROUP B

mysql5.7.26使用groupby分组报错错误1055(42000)_qq_39427595的博客-爱代码爱编程

在使用mysql中group by 关键字做分组操作的时候出现如下错误 ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP BY clause

SqlServer中使用group by分组,同时查询其它N个字段-爱代码爱编程

select查询语句后面用group by分组的话,select 后面跟着的需要查询的字段必须与group by后面的一致。但其实通常情况下只需要通过一个字段去group by ,如果这个查询结果中需要查其它字段怎么办呢? 把其它需要查询的字段放进max函数里就OK了 举个例子: SELECT SySNo,max(StorerName) ,max(S

mybatis使用group by 分组查询返回为null-爱代码爱编程

博主在使用mybatis进行分组查询时数据库有数据,但是mybatis返回为null,使用mybatis版本为3.4.1 解决方法时在resultMap的result标签中添加 property属性 如下: ```java <resultMap id="deptMap" type="java.util.Map"> <r

MySQL使用group by分组时报错-爱代码爱编程

文章目录 MySQL使用group by分组时报错#1 环境#2 问题描述#3 问题分析#4 解决 MySQL使用group by分组时报错 #1 环境 MySQL 5.7.20 #2 问题描述 输入: mysql> select * from SC group by Sid; 输出结果: ERROR 1055 (42

SQL使用GROUP BY分组排序问题-爱代码爱编程

当我们想要查询一个单表或者想要JOIN一个表的数据,且需要使用GROUP BY来进行分组时,发现分组之后的顺序又不是我们想要的顺序,怎么办? 例子 测试数据: SELECT * FROM lesson l ORDER BY l.course_id; 上面是一个用于测试的数据表,一个course_id对应多个lesson_id,且每个lesso

MySQL使用group by分组然后进行条件筛选获取每组最新数据-爱代码爱编程

MySQL使用group by分组然后进行条件筛选 使用场景如下:对一张数据表数据进行select查询操作,要求:对消息类型进行分组,然后获取每种类型最新的一条信息实现思路获取最新数据 一般数据表插入的时候ID主键一般都是自动递增的,所以最新数据ID肯定最大。select查询语句实现步骤 select 查询目标数据 from table_name wh

laravel中使用group by分组并查询数量-爱代码爱编程

实例 $num = DB::table('addr_number') ->select('address', DB::raw('count(*) as num')) ->groupBy('address')->get(); dd($num); 打印 Illuminate\Support\Collection

MySql 使用group by 分组,获取第一条数据-爱代码爱编程

1、同一个分组中假如有三条数据,我们想要获取指定的第一条数据,作为查出来的数据 2、第一步:通过时间排序,并将id拼接起来  ,截取第一个id,(也就是最新的一条id)      select SUBSTRING_INDEX(group_concat( id order by create_datetime desc),',',1) from ctd_

9、使用GROUP BY分组查询-爱代码爱编程

在 MySQL 中,GROUP BY 关键字可以根据一个或多个字段对查询结果进行分组。 使用 GROUP BY 关键字的语法格式如下: GROUP BY <字段名> 其中,“字段名”表示需要分组的字段名称,多个字段时用逗号隔开。 GROUP BY单独使用 单独使用 GROUP BY 关键字时,查询结果会只显示每个分组的第一条记录。

Python的pandas的Dataframe使用groupby分组并求每组的统计值-爱代码爱编程

版权声明:转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/110690440   import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(6, 4

获取使用group by 分组后的组内最新(最大,最...)的一条数数据-爱代码爱编程

sql取group by 分组后的组内最新(最大,最…)的一条数数据 最近一个有个需求是 , 取分组后的组内最新的一条数据, 正常来说写法如下 select a.* from ( select cluesTaracking_id,cluesId,trackingTime,fail_why from cluestracking order by t

MySQL使用GROUP BY分组时如何留下指定的行-爱代码爱编程

前言 假设有一个存储文章信息的数据表(article),结构如下: 字段名说明id主键IDauthor_id作者IDtitle文章标题content文章内容add_time文章添加时间edit_time文章上一次编辑时间作者和文章是一对多的关系,现在需要从这个表里查出每个作者最近编辑过的一篇文章,那么可以怎么写SQL语句呢? 分析 这个查询有两个条

mysql 分组字段拼接_MySQL使用group by分组后对某个字段值拼接成字符串方法-爱代码爱编程

只需要使用GROUP_CONCAT函数可以在使用groupby分组后,将某个字段的值进行拼接合并 示例: mysql--dba_admin@127.0.0.1:test 12:38:31>>select * from student; +----+-----------------+--------+ | id | class |

mysql查分组后的平均数_MySQL中使用group by分组查询-爱代码爱编程

group by 表示根据指定字段进行分组查询 1.什么时候使用group by? group by 一般是和聚合函数一起使用的 ps:常用聚合函数 count() 计数  sum() 求和  avg() 平均数  max() 最大值  min() 最小值 2.筛选结果使用where和group by ,表示先执行where条件筛选后再进行分