【发布时间】:2021-08-31 22:56:42
【问题描述】:
我是 SQL 新手,我一直在尝试为我的数据库创建视图。 当我介绍聚合函数时,我很快就发现了这个问题;
所以在我的数据库中有两个表: 用户/员工数据表和组(例如“会计”、“支持”等)。
我想使用查询/视图为该组中的员工返回每个组的整个员工条目以及(该组的)最低/最高工资。
这是表格:
--- 员工数据---
CREATE TABLE `db_java-sql-hookup`.`tbl_employee-data` (
`ID_Employee` bigint UNIQUE NOT NULL AUTO_INCREMENT,
`fk_IDGroup` tinyint,
`EmployeeName` varchar(30) UNIQUE NOT NULL,
`Email` varchar(255) NOT NULL,
`Password` varchar(255) NOT NULL,
`Salary` int,
PRIMARY KEY (`ID_Employee`),
FOREIGN KEY (`fk_IDGroup`) REFERENCES `db_java-sql-hookup`.`tbl_groups`(`pk_IDGroup`)
);
INSERT INTO `db_java-sql-hookup`.`tbl_employee-data` (`EmployeeName`, `Email`, `Password`)
VALUES
("TestA", "TestA@web.com", "1234"),
("TestB", "TestB@web.com", "1234"),
("TestC", "TestC@web.com", "abcde"),
("TestD", "TestD@web.com", "0000"),
("TestE", "TestE@web.com", "g8t3");
### Set Groups ###
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `fk_IDGroup` = 1 WHERE `tbl_employee-data`.`ID_Employee` = 1;
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `fk_IDGroup` = 1 WHERE `tbl_employee-data`.`ID_Employee` = 2;
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `fk_IDGroup` = 1 WHERE `tbl_employee-data`.`ID_Employee` = 3;
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `fk_IDGroup` = 2 WHERE `tbl_employee-data`.`ID_Employee` = 4;
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `fk_IDGroup` = 2 WHERE `tbl_employee-data`.`ID_Employee` = 5;
### Set Salaries ###
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `Salary` = 1000 WHERE `tbl_employee-data`.`ID_Employee` = 1;
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `Salary` = 500 WHERE `tbl_employee-data`.`ID_Employee` = 2;
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `Salary` = 2000 WHERE `tbl_employee-data`.`ID_Employee` = 3;
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `Salary` = 750 WHERE `tbl_employee-data`.`ID_Employee` = 4;
UPDATE `db_java-sql-hookup`.`tbl_employee-data`
SET `Salary` = 300 WHERE `tbl_employee-data`.`ID_Employee` = 5;
---分组数据---
CREATE TABLE `db_java-sql-hookup`.`tbl_groups` (
`pk_IDGroup` tinyint UNIQUE NOT NULL AUTO_INCREMENT,
`GroupName` varchar(40) NOT NULL,
PRIMARY KEY (`pk_IDGroup`)
);
INSERT INTO `db_java-sql-hookup`.`tbl_groups` (`GroupName`)
VALUES
("Accounting"),
("Support"),
("Development"),
("Test");
之前,我处理过这些视图(我想将它们结合起来):
### MaxSalaryEmp ###
DROP VIEW IF EXISTS `db_java-sql-hookup`.`view_MaxSalaryEmployee`;
CREATE VIEW `db_java-sql-hookup`.`view_MaxSalaryEmployee` AS
SELECT `ID_Employee`, `EmployeeName`, `Salary`
FROM `db_java-sql-hookup`.`tbl_employee-data`
WHERE `Salary` =
(SELECT MAX(`Salary`) FROM `db_java-sql-hookup`.`tbl_employee-data`);
### Avg,Min,Max Group Salary ###
DROP VIEW IF EXISTS `db_java-sql-hookup`.`view_CombinedGroupSalary`;
CREATE VIEW `db_java-sql-hookup`.`view_CombinedGroupSalary` AS
SELECT `GroupName`,
AVG(`Salary`) AS `AvgSalary`,
MIN(`Salary`) AS `MinSalary`,
MAX(`Salary`) AS `MaxSalary`
FROM `db_java-sql-hookup`.`tbl_groups` AS grp
LEFT JOIN `db_java-sql-hookup`.`tbl_employee-data` AS emp
ON grp.`pk_IDGroup` = emp.`fk_IDGroup`
GROUP BY `GroupName`
ORDER BY `GroupName`;
我尝试过这样的事情:
SELECT `GroupName`, `ID_Employee`, `EmployeeName`, `Salary`,
MAX(`Salary`) AS `MaxSalary`
FROM `db_java-sql-hookup`.`tbl_groups` AS grp
LEFT JOIN `db_java-sql-hookup`.`tbl_employee-data` AS emp
ON grp.`pk_IDGroup` = emp.`fk_IDGroup`
GROUP BY `GroupName`
ORDER BY `GroupName`;
我希望最终结果如下所示: https://i.stack.imgur.com/xsmLT.png
(除了,它应该派出合适的员工而不是这里发生的任何事情)
提前谢谢你!
【问题讨论】: