Oracle数据库中一个字段统计分析(oracle一个字段统计)
Oracle数据库中一个字段统计分析
在数据库的应用开发中,常常需要对某个字段进行统计分析。Oracle数据库是一种关系型数据库,提供了多种统计分析函数,例如SUM、AVG、COUNT等。本文将介绍如何使用这些函数进行字段的统计分析,并通过示例代码演示。
一、简单统计函数
1、COUNT函数
COUNT函数用于统计行数,可以用来计算在一个表中有多少行数据。其基本语法如下:
“`sql
SELECT COUNT(column_name) FROM table_name;
其中,column_name指定要统计的列,如果不加参数,则统计表中所有行的数量。
下面是一个示例,统计employees表中有多少行数据:
```sqlSELECT COUNT(*) FROM employees;
2、SUM函数
SUM函数用于对数值列求和。其基本语法如下:
“`sql
SELECT SUM(column_name) FROM table_name;
其中,column_name指定要求和的列。
下面是一个示例,求employees表中salary列的总和:
```sqlSELECT SUM(salary) FROM employees;
3、AVG函数
AVG函数用于对数值列求平均值。其基本语法如下:
“`sql
SELECT AVG(column_name) FROM table_name;
其中,column_name指定要求平均值的列。
下面是一个示例,求employees表中salary列的平均值:
```sqlSELECT AVG(salary) FROM employees;
二、分组统计函数
1、GROUP BY子句
GROUP BY子句用于对查询结果进行分组,可以根据一个或多个列对查询结果进行分组。其基本语法如下:
“`sql
SELECT column1, column2, …
FROM table_name
GROUP BY column1, column2, …;
下面是一个示例,对employees表中的job_id进行分组,并统计每个job_id有多少行数据:
```sqlSELECT job_id, COUNT(*)
FROM employees GROUP BY job_id;
2、HAVING子句
HAVING子句用于对分组后的结果进行筛选,可以用于过滤一些不需要的数据。其基本语法如下:
“`sql
SELECT column1, column2, …
FROM table_name
GROUP BY column1, column2, …
HAVING condition;
其中,condition是一个过滤条件,类似于WHERE子句。
下面是一个示例,对employees表中的job_id进行分组,并统计每个job_id的平均salary,只显示平均salary大于等于5000的数据:
```sqlSELECT job_id, AVG(salary)
FROM employees GROUP BY job_id
HAVING AVG(salary) >= 5000;
综上所述,Oracle数据库提供了多种统计函数和分组函数,可以实现对字段的快速统计和分析。在实际应用中,结合WHERE子句、ORDER BY子句和子查询等,可以实现更加复杂的查询和分析。
附:示例代码
我们需要准备一个测试数据表。可以使用以下代码创建一个employees表:
“`sql
CREATE TABLE employees (
employee_id NUMBER(6) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(20),
eml VARCHAR2(50),
phone_number VARCHAR2(20),
hire_date DATE,
job_id VARCHAR2(20),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
manager_id NUMBER(6),
department_id NUMBER(4)
);
INSERT INTO employees VALUES (100, ‘Steven’, ‘King’, ‘SKING’, ‘515.123.4567’, ‘2003-06-17’, ‘AD_PRES’, 24000, NULL, NULL, 90);
INSERT INTO employees VALUES (101, ‘Neena’, ‘Kochhar’, ‘NKOCHHAR’, ‘515.123.4568’, ‘2005-09-21’, ‘AD_VP’, 17000, NULL, 100, 90);
INSERT INTO employees VALUES (102, ‘Lex’, ‘De Haan’, ‘LDEHAAN’, ‘515.123.4569’, ‘2001-01-13’, ‘AD_VP’, 17000, NULL, 100, 90);
INSERT INTO employees VALUES (103, ‘Alexander’, ‘Hunold’, ‘AHUNOLD’, ‘590.423.4567’, ‘2006-01-03’, ‘IT_PROG’, 9000, NULL, 102, 60);
INSERT INTO employees VALUES (104, ‘Bruce’, ‘Ernst’, ‘BERNST’, ‘590.423.4568’, ‘2007-05-21’, ‘IT_PROG’, 6000, NULL, 103, 60);
INSERT INTO employees VALUES (105, ‘David’, ‘Austin’, ‘DAUSTIN’, ‘590.423.4569’, ‘2005-06-25’, ‘IT_PROG’, 4800, NULL, 103, 60);
INSERT INTO employees VALUES (106, ‘Valli’, ‘Pataballa’, ‘VPATABAL’, ‘590.423.4560’, ‘2006-02-05’, ‘IT_PROG’, 4800, NULL, 103, 60);
INSERT INTO employees VALUES (107, ‘Diana’, ‘Lorentz’, ‘DLORENTZ’, ‘590.423.5567’, ‘2007-02-07’, ‘IT_PROG’, 4200, NULL, 103, 60);
INSERT INTO employees VALUES (108, ‘Nancy’, ‘Greenberg’, ‘NGREENBE’, ‘515.124.4569’, ‘2002-08-17’, ‘FI_MGR’, 12008, NULL, 101, 100);
INSERT INTO employees VALUES (109, ‘Daniel’, ‘Faviet’, ‘DFAVIET’, ‘515.124.4169’, ‘2002-08-16’, ‘FI_ACCOUNT’, 9000, NULL, 108, 100);
INSERT INTO employees VALUES (110, ‘John’, ‘Chen’, ‘JCHEN’, ‘515.124.4269’, ‘2005-09-28’, ‘FI_ACCOUNT’, 8200, NULL, 108, 100);
INSERT INTO employees VALUES (111, ‘Ismael’, ‘Sciarra’, ‘ISCIARRA’, ‘515.124.4369’, ‘2005-09-30’, ‘FI_ACCOUNT’, 7700, NULL, 108, 100);
INSERT INTO employees VALUES (112, ‘Jose Manuel’, ‘Urman’, ‘JMURMAN’, ‘515.124.4469’, ‘2006-03-07’, ‘FI_ACCOUNT’, 7800, NULL, 108, 100);
INSERT INTO employees VALUES (113, ‘Luis’, ‘Popp’, ‘LPOPP’, ‘515.124.4567’, ‘2007-12-07’, ‘FI_ACCOUNT’, 6900, NULL, 108, 100);
接下来,我们可以使用以下代码演示统计分析:
```sql-- 查询employees表中的行数
SELECT COUNT(*) FROM employees;
-- 查询employees表中salary列的总和SELECT SUM(salary) FROM employees;
-- 查询employees表中salary列的平均值SELECT AVG(salary) FROM employees;
-- 按job_id分组,统计每个job_id的行数SELECT job_id, COUNT(*) FROM employees GROUP BY job_id;
-- 按job_id分组,统计每个job_id的平均salary,只显示平均salary大于等于5000的数据SELECT job_id, AVG(salary) FROM employees GROUP BY job_id HAVING AVG(salary) >= 5000;
注意:示例代码中的日期格式为yyyy-mm-dd。如果系统日期格式不同,可能需要使用TO_DATE函数将日期字符串转换为日期类型。例如:TO_DATE(‘2003-06-17’, ‘yyyy-mm-dd’)。