首页 > 数据库 > 数据库开发技术 > 五种主流数据库:数据汇总
| 聚合函数 | 函数功能 | MySQL | Oracle | SQL Server | PostgreSQL | SQLite |
|---|---|---|---|---|---|---|
| COUNT() | 返回查询结果或者表中的行数 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| AVG() | 计算一组数据的平均值 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SUM() | 计算一组数值的总和 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| MAX() | 返回一组数据中的最大值 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| MIN() | 返回一组数据中的最小值 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| LISTAGG() | 将一组字符串合并成一个字符串 | GROUP_CONCAT() | ✔️ | STRING_AGG() | STRING_AGG() | GROUP_CONCAT() |
聚合函数的参数支持 DISTINCT 关键字,表示在计算之前排除重复数据。
聚合函数在计算时忽略数据中的 NULL 值,COUNT(*) 函数除外。
SELECT COUNT(*) AS "员工数量"
FROM employee;
员工数量
------
25
SELECT COUNT(emp_id), COUNT(0)
FROM employee;
COUNT(emp_id)|COUNT(0)
-------------|--------
25| 25
SELECT COUNT(sex) AS "所有性别", COUNT(DISTINCT sex) AS "不同性别"
FROM employee;
所有性别|不同性别
-------|-------
25| 2
SELECT COUNT(*) AS "员工数量",
COUNT(bonus) AS "拥有奖金",
COUNT(*) - COUNT(bonus) AS "没有奖金"
FROM employee;
员工数量|拥有奖金|没有奖金
------|-------|-------
25| 9| 16
SELECT AVG(salary) AS "平均月薪"
FROM employee;
平均月薪
-----------
9832.000000
SELECT AVG(DISTINCT salary) AS "平均月薪"
FROM employee;
平均月薪
-----------
9865.000000
SELECT AVG(bonus) AS "平均奖金"
FROM employee;
平均奖金
-----------
6388.888889
SELECT AVG(CASE WHEN bonus IS NULL THEN 0 ELSE bonus END) AS "平均奖金"
FROM employee;
平均奖金
-----------
2300.000000
SELECT SUM(salary) AS "月薪总和"
FROM employee;
月薪总和
---------
245800.00
SELECT SUM(bonus)/COUNT(*) AS "平均奖金"
FROM employee;
SELECT MAX(hire_date) AS "入职时间"
FROM employee;
入职时间
----------
2019-05-11
SELECT MIN(hire_date) AS "入职时间"
FROM employee;
入职时间
----------
2000-01-01
-- Oracle
SELECT LISTAGG(email, ';') AS "收件人"
FROM employee
WHERE dept_id = 1;
收件人
-------------------------------------------------------
liubei@shuguo.com;guanyu@shuguo.com;zhangfei@shuguo.com
-- Oracle
SELECT LISTAGG(email, ';') WITHIN GROUP (ORDER BY email) AS "收件人"
FROM employee
WHERE dept_id = 1;
收件人
-------------------------------------------------------
guanyu@shuguo.com;liubei@shuguo.com;zhangfei@shuguo.com
-- MySQL
SELECT GROUP_CONCAT(email ORDER BY email SEPARATOR ';') AS "收件人"
FROM employee
WHERE dept_id = 1;
-- SQLite
SELECT GROUP_CONCAT(email, ';') AS "收件人"
FROM employee
WHERE dept_id = 1;
-- Microsoft SQL Server
SELECT STRING_AGG(email, ';') WITHIN GROUP (ORDER BY email) AS "收件人"
FROM employee
WHERE dept_id = 1;
-- PostgreSQL
SELECT STRING_AGG(email, ';' ORDER BY email) AS "收件人"
FROM employee
WHERE dept_id = 1;
原文作者:SQL编程思想;如有侵权,请联系管理员删除。