DROP TABLE IF EXISTS `EMPLOYEESALARY`
CREATE TABLE `EMPLOYEESALARY` (
`ID` INT(5) NOT NULL AUTO_INCREMENT COMMENT 'PRIMARY KEY',
`NAME` VARCHAR(20) NOT NULL,
`SALARY` FLOAT(8),
`DEPARTMENT` VARCHAR(20),
PRIMARY KEY(`ID`)
)ENGINE MYISAM DEFAULT CHARSET=utf8 COMMENT 'EMPLOYEE TABLE';
SELECT `ID`,`NAME` FROM `EMPLOYEESALARY` AS TABLE1
LEFT JOIN
( SELECT `DEPARTMENT`,AVG(`SALARY`) AS SALARY FROM `EMPLOYEESALARY` GROUP BY `DEPARTMENT` ) AS TABLE2
ON TABLE1.`DEPARTMENT` = TABLE2.`DEPARTMENT`
WHERE TABLE1.`SALARY` >= TABLE2.`SALARY`;
<span style="font-family: Arial, Helvetica, sans-serif;">mysql的存儲過程實現,mysql中沒有像oracle中的%rowtype</span>
DELIMITER $$
CREATE PROCEDURE `test`.`SalaryCalcProc`()
BEGIN
#部門名
DECLARE DEPARTMENT1 VARCHAR(20);
#薪水
DECLARE SALARY1 FLOAT(8);
#關於部門平均薪水的遊標
DECLARE DESTCURSOR CURSOR FOR SELECT `DEPARTMENT`,AVG(`SALARY`) FROM `EMPLOYEESALARY` GROUP BY `DEPARTMENT`;
#打開遊標
OPEN DESTCURSOR;
#循環遊標
READ_LOOP:LOOP
#讀取遊標值
FETCH DESTCURSOR INTO DEPARTMENT1,SALARY1;
IF FALSE THEN
LEAVE READ_LOOP;
END IF;
#檢索出高於部門平均薪水的職員
SELECT * FROM `EMPLOYEESALARY` WHERE SALARY >= SALARY1 AND DEPARTMENT = DEPARTMENT1;
END LOOP;
END$$
DELIMITER ;