深入解析:板凳-------Mysql cookbook学习 (九--2)

news/2025/10/6 21:30:15/文章来源:https://www.cnblogs.com/slgkaifa/p/19127953

深入解析:板凳-------Mysql cookbook学习 (九--2)

mysql>
show
databases
;
+--------------------+
|
Database |
+--------------------+
| cookbook |
| employees |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
6
rows in
set (0.01 sec)
mysql>
use employees;
Database changed

#–基本SQL语句练习

  1. 基本联表查询(获取当前薪资)
sql
SELECT e.first_name, s.salary, s.salary+1000
AS increased_salary
FROM employees e
JOIN salaries s ON e.emp_no = s.emp_no
WHERE e.emp_no IN (
SELECT emp_no FROM dept_emp WHERE dept_no = 'd005' -- 假设 department_id 50 对应 dept_no 'd005'
)
AND s.to_date = '9999-01-01'
;
-- 获取当前有效薪资
2. 如果你需要按部门查询(假设部门50对应 dept_no 'd005'):
sql
SELECT e.first_name, s.salary, s.salary+1000
AS increased_salary
FROM employees e
JOIN salaries s ON e.emp_no = s.emp_no
JOIN dept_emp de ON e.emp_no = de.emp_no
WHERE de.dept_no = 'd005' -- 部门编号可能需要调整
AND s.to_date = '9999-01-01'
AND de.to_date = '9999-01-01'
;
-- 当前部门任职
3. 如果不知道部门编号对应关系:
sql
SELECT *
FROM departments;
-- 先查看部门编号对应关系
mysql>
SELECT
-> d.dept_no,
-> d.dept_name,
->
COUNT(
DISTINCT e.emp_no)
AS employee_count,
->
SUM(s.salary)
AS total_salary,
->
AVG(s.salary)
AS avg_salary
->
FROM
-> departments d
->
JOIN
-> dept_emp de ON d.dept_no = de.dept_no
->
JOIN
-> employees e ON de.emp_no = e.emp_no
->
JOIN
-> salaries s ON e.emp_no = s.emp_no
->
WHERE
-> de.to_date = '9999-01-01'
->
AND s.to_date = '9999-01-01'
->
GROUP
BY
-> d.dept_no, d.dept_name;
+---------+--------------------+----------------+--------------+------------+
| dept_no | dept_name | employee_count | total_salary | avg_salary |
+---------+--------------------+----------------+--------------+------------+
| d001 | Marketing | 14842 | 1188233434 | 80058.8488 |
| d002 | Finance | 12437 | 977049936 | 78559.9370 |
| d003 | Human Resources | 12898 | 824464664 | 63921.8998 |
| d004 | Production | 53304 | 3616319369 | 67843.3020 |
| d005 | Development | 61386 | 4153249050 | 67657.9196 |
| d006 | Quality Management | 14546 | 951919236 | 65441.9934 |
| d007 | Sales | 37701 | 3349845802 | 88852.9695 |
| d008 | Research | 15441 | 1048650423 | 67913.3750 |
| d009 | Customer Service | 17569 | 1182134209 | 67285.2302 |
+---------+--------------------+----------------+--------------+------------+
9
rows in
set (3.55 sec)
mysql>
SELECT
-> d.dept_no,
-> d.dept_name,
->
COUNT(
DISTINCT e.emp_no)
AS employee_count,
->
SUM(s.salary)
AS total_salary,
->
AVG(s.salary)
AS avg_salary,
-> CONCAT(FORMAT(SUM(s.salary)/10000
, 2
)
, '万'
)
AS total_salary_wan,
-> CONCAT(
->
SUM(
CASE
WHEN s.salary <
50000
THEN 1
ELSE 0
END
)
, '人'
,
->
'('
, ROUND(SUM(
CASE
WHEN s.salary <
50000
THEN 1
ELSE 0
END
)/COUNT(*
)*100
, 0
)
, '%)'
->
)
AS low_salary_stats,
-> CONCAT(
->
SUM(
CASE
WHEN s.salary BETWEEN 50000 AND 100000
THEN 1
ELSE 0
END
)
, '人'
,
->
'('
, ROUND(SUM(
CASE
WHEN s.salary BETWEEN 50000 AND 100000
THEN 1
ELSE 0
END
)/COUNT(*
)*100
, 0
)
, '%)'
->
)
AS medium_salary_stats
->
FROM
-> departments d
->
JOIN
-> dept_emp de ON d.dept_no = de.dept_no
->
JOIN
-> employees e ON de.emp_no = e.emp_no
->
JOIN
-> salaries s ON e.emp_no = s.emp_no
->
WHERE
-> de.to_date = '9999-01-01'
->
AND s.to_date = '9999-01-01'
->
GROUP
BY
-> d.dept_no, d.dept_name;
+---------+--------------------+----------------+--------------+------------+------------------+------------------+---------------------+
| dept_no | dept_name | employee_count | total_salary | avg_salary | total_salary_wan | low_salary_stats | medium_salary_stats |
+---------+--------------------+----------------+--------------+------------+------------------+------------------+---------------------+
| d001 | Marketing | 14842 | 1188233434 | 80058.8488 | 118
,823.34| 481(3%
) | 12369(83%
) |
| d002 | Finance | 12437 | 977049936 | 78559.9370 | 97
,704.99| 456(4%
) | 10560(85%
) |
| d003 | Human Resources | 12898 | 824464664 | 63921.8998 | 82
,446.47| 1825(14%
) | 10927(85%
) |
| d004 | Production | 53304 | 3616319369 | 67843.3020 | 361
,631.94| 5292(10%
) | 46794(88%
) |
| d005 | Development | 61386 | 4153249050 | 67657.9196 | 415
,324.91| 6229(10%
) | 53805(88%
) |
| d006 | Quality Management | 14546 | 951919236 | 65441.9934 | 95
,191.92| 1821(13%
) | 12546(86%
) |
| d007 | Sales | 37701 | 3349845802 | 88852.9695 | 334
,984.58| 397(1%
) | 27240(72%
) |
| d008 | Research | 15441 | 1048650423 | 67913.3750 | 104
,865.04| 1584(10%
) | 13487(87%
) |
| d009 | Customer Service | 17569 | 1182134209 | 67285.2302 | 118
,213.42| 2220(13%
) | 14594(83%
) |
+---------+--------------------+----------------+--------------+------------+------------------+------------------+---------------------+
9
rows in
set (4.37 sec)
mysql>
SHOW VARIABLES LIKE 'secure_file_priv'
;
+------------------+---------------------------------+
| Variable_name |
Value |
+------------------+---------------------------------+
| secure_file_priv | D:\software\MySql\Data\Uploads\ |
+------------------+---------------------------------+
1
row in
set
, 1 warning (0.10 sec)
SELECT
d.dept_name,
COUNT(*
)
AS employee_count,
AVG(s.salary)
AS avg_salary,
SUM(s.salary)
AS total_salary
FROM
departments d
JOIN
dept_emp de ON d.dept_no = de.dept_no
JOIN
salaries s ON de.emp_no = s.emp_no
WHERE
de.to_date = '9999-01-01'
AND s.to_date = '9999-01-01'
GROUP
BY
d.dept_name
INTO
OUTFILE 'D:\\software\\MySql\\Data\\Uploads\\department_salary.csv'
FIELDS
TERMINATED
BY ','
ENCLOSED
BY '"'
LINES
TERMINATED
BY '\n'
;

在 MySQL 中,确保使用 utf8mb4 字符集导出数据:

SELECT
'dept_name'
AS dept_name,
'employee_count'
AS employee_count,
'avg_salary'
AS avg_salary,
'total_salary'
AS total_salary
UNION
ALL
SELECT
d.dept_name,
COUNT(*
)
AS employee_count,
AVG(s.salary)
AS avg_salary,
SUM(s.salary)
AS total_salary
FROM
departments d
JOIN
dept_emp de ON d.dept_no = de.dept_no
JOIN
salaries s ON de.emp_no = s.emp_no
WHERE
de.to_date = '9999-01-01'
AND s.to_date = '9999-01-01'
GROUP
BY
d.dept_name
INTO
OUTFILE 'D:\\software\\MySql\\Data\\Uploads\\department_salary.csv'
CHARACTER
SET utf8mb4 -- 显式指定字符集
FIELDS
TERMINATED
BY ','
ENCLOSED
BY '"'
LINES
TERMINATED
BY '\n'
;
import pandas as pd
import matplotlib.pyplot as plt
# 方法1:使用 utf-8-sig 编码(自动处理 BOM 头)
df = pd.read_csv(
'D:/software/MySql/Data/Uploads/department_salary.csv'
,
encoding='utf-8-sig'
, # 推荐使用,兼容带 BOM 的 UTF-8 文件
header=None,
names=['dept_name'
, 'employee_count'
, 'avg_salary'
, 'total_salary']
)
# 方法2:使用 utf-8 编码(如果文件无 BOM 头)
df = pd.read_csv(
'D:/software/MySql/Data/Uploads/department_salary.csv'
,
encoding='utf-8'
,
header=None,
names=['dept_name'
, 'employee_count'
, 'avg_salary'
, 'total_salary']
)
# 验证中文显示
print(df.head(
)
)
# 绘图代码(保持不变)
plt.figure(figsize=(12
, 6
)
)
plt.bar(df['dept_name']
, df['avg_salary']
, color='skyblue'
)
plt.xticks(rotation=45
, ha='right'
)
plt.title('各部门平均薪资对比'
, fontsize=14
)
plt.xlabel('部门名称'
, fontsize=12
)
plt.ylabel('平均薪资'
, fontsize=12
)
plt.grid(axis='y'
, linestyle='--'
, alpha=0.7
)
plt.tight_layout(
)
plt.
show(
)

在这里插入图片描述

mysql>
SELECT
-> dept_name,
->
COUNT(*
)
AS total_employees,
-> CONCAT(ROUND(SUM(salary <
40000
)/COUNT(*
)*100
)
, '%'
)
AS "低薪(<4万)"
,
-> CONCAT(ROUND(SUM(salary BETWEEN 40000 AND 80000
)/COUNT(*
)*100
)
, '%'
)
AS "中薪(4-8万)"
,
-> CONCAT(ROUND(SUM(salary >
80000
)/COUNT(*
)*100
)
, '%'
)
AS "高薪(>8万)"
->
FROM (
->
SELECT
-> d.dept_name, s.salary
->
FROM
-> salaries s
->
JOIN
-> dept_emp de ON s.emp_no = de.emp_no
->
JOIN
-> departments d ON de.dept_no = d.dept_no
->
WHERE
-> s.to_date = '9999-01-01'
->
AND de.to_date = '9999-01-01'
->
)
AS current_salaries
->
GROUP
BY dept_name
->
ORDER
BY SUM(salary >
80000
)/COUNT(*
)
DESC
;
-- 按高薪比例排序
+--------------------+-----------------+------------+-------------+------------+
| dept_name | total_employees | 低薪(<
4) | 中薪(4-8) | 高薪(>
8) |
+--------------------+-----------------+------------+-------------+------------+
| Sales | 37701 | 0% | 32% | 68% |
| Marketing | 14842 | 0% | 52% | 48% |
| Finance | 12437 | 0% | 55% | 45% |
| Production | 53304 | 0% | 81% | 19% |
| Research | 15441 | 0% | 81% | 19% |
| Development | 61386 | 0% | 81% | 19% |
| Customer Service | 17569 | 0% | 81% | 18% |
| Quality Management | 14546 | 0% | 86% | 14% |
| Human Resources | 12898 | 0% | 89% | 11% |
+--------------------+-----------------+------------+-------------+------------+
9
rows in
set (7.02 sec)
mysql>
WITH ranked_salaries AS (
->
SELECT
-> d.dept_name,
-> s.salary,
-> ROW_NUMBER(
)
OVER (
->
PARTITION
BY d.dept_no
->
ORDER
BY s.salary
->
)
AS row_num,
->
COUNT(*
)
OVER (
PARTITION
BY d.dept_no)
AS total_employees
->
FROM departments d
->
JOIN dept_emp de ON d.dept_no = de.dept_no
->
JOIN salaries s ON de.emp_no = s.emp_no
->
WHERE de.to_date = '9999-01-01'
->
AND s.to_date = '9999-01-01'
->
)
->
SELECT
-> dept_name,
->
AVG(salary)
AS avg_salary,
->
MAX(
CASE
WHEN row_num = CEIL(total_employees/2.0
)
THEN salary END
)
AS median_salary
->
FROM ranked_salaries
->
GROUP
BY dept_name;
+--------------------+------------+---------------+
| dept_name | avg_salary | median_salary |
+--------------------+------------+---------------+
| Marketing | 80058.8488 | 79125 |
| Finance | 78559.9370 | 77858 |
| Human Resources | 63921.8998 | 62810 |
| Production | 67843.3020 | 66725 |
| Development | 67657.9196 | 66449 |
| Quality Management | 65441.9934 | 64381 |
| Sales | 88852.9695 | 88516 |
| Research | 67913.3750 | 66667 |
| Customer Service | 67285.2302 | 65149 |
+--------------------+------------+---------------+
9
rows in
set (11.74 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20251006 模拟测 总结

\(\mathcal{Preface}\) 分数 \(90+100+100+30=320\)。 挂完了,呜。 \(\mathcal{Problem \space{} A}\) Tag:诈骗,循环。 减法可以出负数,我们希望最后的值最大,可以一开始用最小的值去减其他所有值,但是保留任意…

数据源切换之道

深入探讨SpringBoot动态数据源切换的两种核心实现:MyBatis插件与SpringAOP。从原理剖析到实战演练,从性能对比到生产避坑,为你提供全方位的数据源切换解决方案。大家好,我是 Mr.Sun,一名热爱技术和分享的程序员。…

个人网站 网站教程做网站用php吗

样例简介 智能煤气检测系统通过实时监测环境中烟雾浓度&#xff0c;当一氧化碳浓度超标时&#xff0c;及时向用户发出警报。在连接网络后&#xff0c;配合数字管家应用&#xff0c;用户可以远程配置智能煤气检测系统的报警阈值&#xff0c;远程接收智能煤气检测系统报警信息。…

网站制作有哪些企业做医疗健康类网站需要资质吗

一直以来听的多了&#xff0c;什么UDP广播之类的&#xff0c;不过自己一直没有试验过&#xff0c;这次闲来无聊&#xff0c;于是测试了一下。网上说的其实并不是非常的正确&#xff0c;流传着不少的错误言论&#xff0c;这次自己动手测试了一下&#xff0c;没想到比我想象中的还…

完整教程:tryhackme——Abusing Windows Internals(进程注入)

完整教程:tryhackme——Abusing Windows Internals(进程注入)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

向量存储vs知识图谱:LLM记忆系统技术选型

LLM本质上是无状态的,如果你了解HTTP协议就很好理解这个概念,但是如果你没接触过这,那么可以理解成它们没有短期记忆能力,每次和LLM交互,都得把之前的对话重新喂给它。 短期记忆或者说状态管理其实很好处理,拿几…

QBXT2025S刷题 Day5

今天更废了。 \(30pts\ rk84\)。 今天的题 T1 机房大部分人都做出来了,可是我只是打了个暴力(还没拿分)。 这道题其实可以把 \((b_1,b_2,b_3,b_4)\) 分为 \((b_1,b_2),(b_3,b_4)\) 两个部分。 这样的话,我们就可以…

做视频网站需要什么软件物流如何做网站

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;图解数据结构、算法模板 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️算法的定义二. ⛳️算法的特性2.1 &#x1f514;输入输出2.2 &#x1f514;输入输出2.3 &…

以人类演示视频为提示,学习可泛化的机器人策略 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

card

#include <bits/stdc++.h> using namespace std; #define P pair<char, char> #define mp(x, y) make_pair(x, y)vector< P > oper_list; const int len = 4; const int wide = 4; const int _size …

济宁企业网站建设wordpress页面发布不

打开题目 几次尝试&#xff0c;发现输1 1"&#xff0c;页面都会回显NO,Wrong username password&#xff01;&#xff01;&#xff01; 只有输入1&#xff0c;页面报错&#xff0c;说明是单引号的字符型注入 那我们万能密码试试能不能登录 1 or 11 # 成功登录 得到账号…

网站的建设及维护报告闵行做网站公司铝棒易站公司

目录 1.什么是互联网 2.互联网的发展历史 3.中国互联网的发展历程 4.互联网对人们生活的影响 5.互联网给人类带来了哪些负面影响 1.什么是互联网 互联网&#xff08;Internet&#xff09;是一个全球性的计算机网络系统&#xff0c;它连接了数十亿台计算机和其他设备。它是由…

Ai元人文系列:领域协同深耕:构建人机价值共生的文明实践框架

Ai元人文系列:领域协同深耕:构建人机价值共生的文明实践框架 引言:从割裂到共生的文明演进 我们正站在一个历史性的十字路口。数字技术的浪潮以前所未有的力量重塑着人类社会的基本结构,而人工智能的出现更是将这场…

如何监测光伏系统中的电能质量挑战?分布式光伏电能质量解决方案

如何监测光伏系统中的电能质量挑战?分布式光伏电能质量解决方案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

NFL统一数据生态系统技术架构解析

本文深入解析NFL如何通过统一数据生态系统提升运营效率,涵盖数据治理、数据工程、数据解决方案等五大技术支柱,实现从球员安全到球迷互动的全方位数据驱动决策。NFL统一数据生态系统:从球员安全到球迷互动 NFL正在通…

网站开发和运营维护兰州广告设计制作公司

文章目录一、基础准备1. 技术选型2. 源码克隆3. 安装依赖4. 将 RuoYi-Cloud 项目导入到 IDEA5. 安装启动Mysql6. 安装启动Redis7. 创建数据库&#xff0c;执行 SQL脚本文件二、安装与配置 nacos2.1. 下载nacos2.2. 安装 nacos2.3. nacos持久化配置2.4. 执行脚本文件2.5. nacos连…

大型网站后台登录地址一般是如何设置的虚拟主机购买网站

字典是具有指定数字或键的特定数据集或组。在 Python 以外的编程语言中&#xff0c;它们也被称为哈希映射或关联数组。 一般来说&#xff0c;它是键值对的形式&#xff0c;就像现实世界的字典一样。 要创建字典&#xff0c;请从左括号开始&#xff0c;添加键并键入一个冒号。…

网站制作老了株洲网站建设 公司

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

专业网站开发软件做一个网站的总结

responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后&#xff0c;写入到response对象的body区&#xff0c;通常用来返回JSON数据或者是XML数据&#xff0c;需要注意的呢&#xff0c;在使用此注解之后不会再走视图处理器&#xff0c;而是…

爱站网长尾词挖掘工具建站网址导航hao123

&#x1f4a2;欢迎来到张胤尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 通道通道声明初始化缓冲机制无缓冲通道代码示例 带…