事例使用文件:https://files.cnblogs.com/files/Vera-y/myemployees.zip

分组数据:group by 子句

分组查询语法:

  select 分组函数,列(要求是出现在group by的后面)

  from 表

  (where 筛选条件)  # where 必须连接from关键字

  group by 分组的列表

  (having 分组列表的条件)    #  分组后还有进行限制的条件

  (order by 子句)

1.简单的分组查询

例1.查询每个工种的最高工资

select max(salary), job_id   # job_id:需要分组的列

from employees

group by job_id;

例2.查询每个位置上的部门个数

select count(*),location_id

from departments

group by location_id;

2.添加筛选条件的分组查询

例1.查询邮箱中包含a字符的,每个部门的平均工资

SELECT AVG(salary),department_id
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id;

例2.查询有奖金的每个领导手下员工的最高工资

SELECT MAX(salary), manager_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;

3.添加复杂的筛选条件

例1.查询那个部门的员工个数>2

SELECT COUNT(*), department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;

例2.查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资

SELECT MAX(salary), job_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;

例3.查询领导编号>102的每个领导手下的最低工资>5000的领导编号是那个,以及其最低工资

SELECT MIN(salary), manager_id
FROM employees
WHERE manager_id>102   # 分组前的筛选
GROUP BY manager_id
HAVING MIN(salary)>5000;   # 分组后的筛选

注:分组筛选时,能用分组前筛选,就优先考虑使用,但当分组函数作为条件时,其肯定是放在having子句中

4.按表达式或函数分组

例1.按员工姓名的长度分组,查询每组的员工个数,筛选员工个数>5的有哪些

SELECT COUNT(*),LENGTH(last_name) as leng
FROM employees
GROUP BY LENGTH(last_name)
HAVING COUNT(*)>5;

(注:在MySQL中having和group by 后面是支持别名的,但是orcal等的数据库语言是不支持别名的)

5.按多个字段分组

例1.查询每个部门每个工种的员工 的平均工资

SELECT AVG(salary),department_id,job_id
FROM employees
GROUP BY department_id,job_id;      # 这里位置可以颠倒

6.添加排序

例1.查询每个部门每个工种的员工 的平均工资,按平均工资的高低显示

SELECT AVG(salary),department_id,job_id
FROM employees
GROUP BY department_id,job_id
ORDER BY AVG(salary) DESC;

(注:排序是在group by后面)

数据库MySQL--分组查询的更多相关文章

  1. Oracle和MySQL分组查询GROUP BY

    Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...

  2. mysql 分组查询

    mysql 分组查询 获取id最大的一条 (1)分组查询获取最大id SELECT MAX(id) as maxId FROM `d_table` GROUP BY `parent_id` ; (2) ...

  3. mysql 分组查询问题 group_concat

    这几天在做购物车的时候.购物车内的商品为一个商品占一行,结果再从数据库读出的时候,没有分组,而是循环所有的内容出来,然后进行判断.如果一样的话就把他保存到一个变量中.但是自己逻辑没搞清楚.一直出bug ...

  4. MySQL分组查询与连接查询

    一,分组查询 使用ORDER BY子句将表中的数据分成若干组(还是按行显示) 语法: SELECT 字段名[,聚集函数] FROM 表名 [WHERE子句] GROUP BY 要分组的字段名 [ORD ...

  5. Mysql分组查询group by语句详解

    (1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组(2) group by可用于单个字段分组,也可用于多个字段分组 select * from employee; ...

  6. Oracle数据库之分组查询及排序

    分组查询:使用 group by 来设置分组,把该列具有相同值的多条记录当成一组记录来处理,然后只会输出一条记录,得到的结果会默认使用升序的方式进行排列. 规则: (1)如果使用了分组函数,或者是 g ...

  7. oracle数据库之分组查询

    本章内容和大家分享的是数据当中的分组查询.分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在 ...

  8. oracle数据库之分组查询(转)

    本章内容和大家分享的是数据当中的分组查询.分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在 ...

  9. MySQL分组查询每组最新的一条数据(通俗易懂)

    开发中经常会遇到,分组查询最新数据的问题,比如下面这张表(查询每个地址最新的一条记录): sql如下: -- ---------------------------- -- Table structu ...

  10. mysql 分组查询教程

    1.分组 分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 2.分组的特点 1.)group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组 ...

随机推荐

  1. Netty 相关目录

    Netty 相关目录 Netty 源码学习--客户端流程分析 Netty 源码学习--服务端流程分析 Netty 源码分析--ChannelPipeline Netty 源码学习--EventLoop ...

  2. 由dubbo开始看看所谓的软负载均衡

    待总结 我们在微服务架构中,常用一些注册中心进行订阅消费我们的服务,这时候对于同一服务请求会有不同的机器同时可以提供服务,这时是怎么选择哪一台机器去连接获取服务呢? 负载均衡设备作为纵跨网络2/7层交 ...

  3. 并发新构件之Exchanger:交换器

    Exchanger:JDK描述:可以在对中对元素进行配对和交换的线程的同步点.每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象.Exchang ...

  4. linux每日命令(3):which命令

    这个命令我也神佑体会它的用处,在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which     查看可执行文件的位置. whereis 查看文件的位置. locate ...

  5. 酷狗mac版如何新建歌单?酷狗mac版收藏歌单方法

    很多朋友们都喜欢使用酷狗音乐听音乐,不过最近有使用酷狗mac音乐播放器的Mac新用户,想要新建歌单收藏歌单,但有不知道如何操作,那么苹果电脑酷狗mac版如何新建歌单收藏歌单呢?针对此问题,本文给大家介 ...

  6. leetcood学习笔记-39-组合总和

    题目描述: 方法一: class Solution: def combinationSum(self, candidates, target): """ :type ca ...

  7. leetcood学习笔记-167-两数之和 II - 输入有序数组

    题目描述: 第一次提交: class Solution(object): def twoSum(self, numbers, target): """ :type num ...

  8. AbstractQueuedSynchronizer 详解

    package java.util.concurrent.locks; 基本介绍 AbstractQueuedSynchronizer(队列同步器)可以看作是并发包(java.util.concurr ...

  9. Python ORM封装

    import sys import asyncio import logging logging.basicConfig(level=logging.INFO) # 一次使用异步 处处使用异步 imp ...

  10. 解决php-fpm占用cpu memory过高,开启php-fpm request_slowlog_timeout

    项目刚从win下挪到linux下,发现cpu过高,内存也占用较多,以下是我解决问题的过程: 首先更改php-fpm配置 vim /usr/local/php/etc/php-fpm.conf 找到 r ...