首页 > 数据库 > MySQL > 五种主流数据库:分组统计
| 功能 | MySQL | Oracle | SQL Server | PostgreSQL | SQLite |
|---|---|---|---|---|---|
| GROUP BY | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| HAVING | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
SELECT sex AS "性别"
FROM employee
GROUP BY sex;
性别
---
男
女
SELECT DISTINCT sex AS "性别"
FROM employee;
SELECT dept_id AS "部门编号", sex AS "性别"
FROM employee
GROUP BY dept_id, sex;
部门编号|性别
------|---
1|男
2|男
3|女
4|男
4|女
5|男
SELECT sex AS "性别",
COUNT(*) AS "员工数量",
AVG(salary) AS "平均月薪"
FROM employee
GROUP BY sex;
性别|员工数量|平均月薪
---|-------|------------
男 | 22|10054.545455
女 | 3| 8200.000000
-- Oracle、MySQL 以及 PostgreSQL
SELECT EXTRACT(YEAR FROM hire_date) AS "入职年份",
COUNT(*) AS "员工数量"
FROM employee
GROUP BY EXTRACT(YEAR FROM hire_date)
ORDER BY COUNT(*) DESC;
-- Microsoft SQL Server
SELECT DATEPART(YEAR, hire_date) AS "入职年份",
COUNT(*) AS "员工数量"
FROM employee
GROUP BY DATEPART(YEAR, hire_date)
ORDER BY COUNT(*) DESC;
-- SQLite
SELECT STRFTIME('%Y', hire_date) AS "入职年份",
COUNT(*) AS "员工数量"
FROM employee
GROUP BY STRFTIME('%Y', hire_date)
ORDER BY COUNT(*) DESC;
入职年份|员工数量
-------|-------
2018| 5
2000| 3
2011| 3
2002| 2
2012| 2
2017| 2
...
SELECT bonus AS "奖金", COUNT(*) AS "员工数量"
FROM employee
GROUP BY bonus;
奖金 |员工数量
--------|-------
10000.00| 3
8000.00| 1
| 16
5000.00| 2
6000.00| 1
2000.00| 1
1500.00| 1
-- GROUP BY 错误示例
SELECT dept_id, emp_name, AVG(salary)
FROM employee
GROUP BY dept_id;
-- 使用 WHERE 子句进行数据过滤的错误示例
SELECT dept_id, AVG(salary)
FROM employee
WHERE AVG(salary) > 10000
GROUP BY dept_id;
SELECT dept_id AS "部门编号", AVG(salary) AS "平均月薪"
FROM employee
GROUP BY dept_id
HAVING AVG(salary) > 10000;
部门编号|平均月薪
------|------------
1|26666.666667
2|13166.666667
SELECT dept_id AS "部门编号", COUNT(*) AS "员工数量"
FROM employee
WHERE sex = '女'
GROUP BY dept_id
HAVING COUNT(*) >= 2;
部门编号|员工数量
------|-------
3| 2
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70027826/viewspace-3010555/ ,如需转载,请注明出处,否则将追究法律责任。