当前位置:首页 > 问答 > 正文

Oracle里怎么快速搞定一列数据的统计,别复杂就想知道简单方法

想在Oracle里快速搞定一列数据的统计,最直接、最不费脑子的方法就是使用SQL的聚合函数,你根本不需要去记那些复杂的概念,就想知道怎么敲几个简单的命令出结果,那下面的内容就是为你准备的。

核心思路就一句话:用SELECT语句,配上几个固定的“统计词”,从你的表里把数据捞出来。

想象一下,你有一个表格,比如叫“员工表”,里面有一列叫“工资”,你现在想知道所有员工的工资总和、平均工资、最高工资、最低工资等等,该怎么做?

第一步:打开你的SQL工具 不管你用的是SQL*Plus、SQL Developer、Toad还是其他任何能连接Oracle数据库的工具,首先确保你已经连上了数据库,并且能对你要统计的那张表进行操作。

第二步:写出最基本的统计语句 这里有几个最常用、也最实用的“统计词”(正式名称叫聚合函数):

  1. COUNT:数一数这列总共有多少条记录,公司总共有多少名员工。

    • 简单用法SELECT COUNT(工资列名) FROM 员工表名;
    • 注意:如果工资这一栏有些人是空值(没填),COUNT(工资列名)就不会算这些人,如果你想统计总人数,不管工资填没填,可以用COUNT(*),意思是数一数总共有多少行。
  2. SUM:把这一列所有的数字加起来,计算公司每个月要发多少工资总额。

    • 简单用法SELECT SUM(工资列名) FROM 员工表名;
  3. AVG:计算这一列数字的平均值,员工的平均工资是多少。

    • 简单用法SELECT AVG(工资列名) FROM 员工表名;
    • 提醒:AVG函数会自动忽略掉空值(NULL),比如10个人,1个人工资没录,它是用9个人的工资总和除以9,而不是除以10。
  4. MAX:找出这一列里最大的那个数,公司里谁的工资最高,是多少。

    • 简单用法SELECT MAX(工资列名) FROM 员工表名;
  5. MIN:找出这一列里最小的那个数,公司里最低的工资是多少。

    • 简单用法SELECT MIN(工资列名) FROM 员工表名;

第三步:组合使用,一次搞定 你完全没必要为了这五个数字写五条SQL语句,那样太麻烦了,Oracle允许你把它们全都放在一条语句里,一次执行,结果一起出来,这是最快的方法。

Oracle里怎么快速搞定一列数据的统计,别复杂就想知道简单方法

完整的示例语句长这样:

SELECT
    COUNT(工资) as 员工人数,
    SUM(工资) as 工资总额,
    AVG(工资) as 平均工资,
    MAX(工资) as 最高工资,
    MIN(工资) as 最低工资
FROM 员工表;

把上面的“工资”换成你的实际列名,把“员工表”换成你的实际表名,然后运行一下。

运行后你会看到什么? 结果会以表格的形式出现,只有一行,有五列,每一列的表头就是你写的“员工人数”、“工资总额”这些(as后面的东西,是给这列结果起个易懂的别名),这样,所有基本的统计信息就一目了然了。

如果你想稍微深入一点点:分组统计

上面说的是对整张表的所有数据进行统计,但有时候你的需求会更细一点,你的“员工表”里还有一列叫“部门”,你想知道每个部门的工资统计情况,而不是全公司混在一起。

这时候,就要请出另一个关键字:GROUP BY,它的作用就是“按什么分组”。

Oracle里怎么快速搞定一列数据的统计,别复杂就想知道简单方法

示例语句:

SELECT
    部门名,
    COUNT(工资) as 部门人数,
    AVG(工资) as 部门平均工资,
    MAX(工资) as 部门最高工资
FROM 员工表
GROUP BY 部门名;

这条语句的意思就是:先按照“部门名”这一列把员工分组(比如分成销售部、技术部、财务部),然后分别对每个组进行COUNT、AVG、MAX计算。

运行后,结果就不是一行了,而是每个部门都会有一行统计结果,这样你就能清晰地对比不同部门的情况。

最后几个小贴士,让你用得更顺手:

  • 处理小数点:AVG函数算出来的平均工资可能小数点后面很长一串,看起来烦,你可以用ROUND函数把它四舍五入一下。ROUND(AVG(工资), 2) 就是保留两位小数。
  • 加上条件:如果你只想统计工资超过10000元的员工,或者只想统计销售部的情况,你可以在语句里加上WHERE条件。
    SELECT AVG(工资) FROM 员工表 WHERE 部门名 = '销售部';

    WHERE子句要放在FROM表名之后,GROUP BY之前。

  • 空值问题:再强调一下,COUNT(列名)不统计NULL,AVG、SUM、MAX、MIN也都会忽略NULL,这一点心里要有数。

最快的方法就是一条SELECT语句,结合COUNT、SUM、AVG、MAX、MIN这几个函数,需要分组就看情况加个GROUP BY,这套组合拳打出来,日常工作中百分之八九十的单一列统计需求都能瞬间解决,根本不用去想复杂的东西。

(根据Oracle官方文档中关于SQL聚合函数的基础概念和用法进行说明)