zoukankan      html  css  js  c++  java
  • SQL中GROUP BY用法示例

    概述

    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。
    GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。

    常用聚合函数

    • count() 计数
    • sum() 求和
    • avg() 平均数
    • max() 最大值
    • min() 最小值

    语法

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name;
    

    例子

    接下来我们将通过例子进行理解:
    我们现在有一张dept_emp表共四个字段,分别是emp_no(员工编号),dept_no(部门编号),from_date(起始时间),to_date(结束时间),记录了员工在某一部门所处时间段,to_date等于9999-01-01的表示目前还在职。

    image.png

    部门人数

    我们现在想知道每个部门有多少名在职员工,步骤如下:

    1. 筛选在职员工 where to_date='9999-01-01';
    2. 对部门进行分组group by dept_no
    3. 对员工进行计数 count(emp_no)
    完整语句如下:
    SELECT
      dept_no as 部门,
      count( emp_no) as 人数
    FROM
      dept_emp 
    WHERE
      to_date = '9999-01-01' 
    GROUP BY
      dept_no
    
    结果

    image.png

    部门名称

    我们上一步分组之后得到的结果是部门编号,下一步我们可以通过departments去关联出部门名称,语句如下:

    SELECT
    	( SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部门,
    	count( de.emp_no ) AS 人数 
    FROM
    	dept_emp de 
    WHERE
    	de.to_date = '9999-01-01' 
    GROUP BY
    	de.dept_no
    
    结果

    image.png

    HAVING

    当然提到GROUP BY 我们就不得不提到HAVING,HAVING相当于条件筛选,但它与WHERE筛选不同,HAVING是对于GROUP BY对象进行筛选。
    我们举个例子:
    每个部门人数都有了,那如果我们想要进一步知道员工人数大于30000的部门是哪些,这个时候就得用到HAVING了。
    语句如下:

    SELECT
    	( SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部门,
    	count( de.emp_no ) AS 人数 
    FROM
    	dept_emp de 
    WHERE
    	de.to_date = '9999-01-01' 
    GROUP BY
    	de.dept_no 
    HAVING
    	count( de.emp_no ) > 30000 
    
    结果

    image.png

    以上便是GROUP BY的一些基本使用方法介绍,如有其他问题,欢迎留言~

  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/awesometang/p/12005721.html
Copyright © 2011-2022 走看看