2014-10-16 85 views
0
CREATE TABLE `departments` (
    `DEPARTMENT_ID` decimal(6,0) NOT NULL, 
    `DEPARTMENT_NAME` varchar(30) CHARACTER SET utf8 NOT NULL, 
    `MANAGER_ID` decimal(8,0) DEFAULT NULL, 
    `LOCATION_ID` decimal(6,0) DEFAULT NULL, 
    PRIMARY KEY (`DEPARTMENT_ID`), 
    KEY `LOCATION_ID` (`LOCATION_ID`), 
    CONSTRAINT `FK_departments_locations` FOREIGN KEY (`LOCATION_ID`) REFERENCES `locations` (`LOCATION_ID`) 


CREATE TABLE `employees` (
    `EMPLOYEE_ID` decimal(8,0) NOT NULL, 
    `FIRST_NAME` varchar(20) CHARACTER SET utf8 DEFAULT NULL, 
    `LAST_NAME` varchar(25) CHARACTER SET utf8 NOT NULL, 
    `EMAIL` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `PHONE_NUMBER` varchar(20) CHARACTER SET utf8 DEFAULT NULL, 
    `HIRE_DATE` date DEFAULT NULL, 
    `JOB_ID` varchar(10) CHARACTER SET utf8 NOT NULL, 
    `SALARY` decimal(10,2) DEFAULT NULL, 
    `COMMISSION_PCT` decimal(4,2) DEFAULT NULL, 
    `MANAGER_ID` decimal(8,0) DEFAULT NULL, 
    `DEPARTMENT_ID` decimal(6,0) DEFAULT NULL, 
    PRIMARY KEY (`EMPLOYEE_ID`), 
    KEY `DEPARTMENT_ID` (`DEPARTMENT_ID`), 
    KEY `MANAGER_ID` (`MANAGER_ID`), 
    KEY `JOB_ID` (`JOB_ID`), 
    CONSTRAINT `FK_employees_departments` FOREIGN KEY (`DEPARTMENT_ID`) REFERENCES `departments` (`DEPARTMENT_ID`), 
    CONSTRAINT `FK_employees_employees` FOREIGN KEY (`MANAGER_ID`) REFERENCES `employees` (`EMPLOYEE_ID`), 
    CONSTRAINT `FK_employees_jobs` FOREIGN KEY (`JOB_ID`) REFERENCES `jobs` (`JOB_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

所以,在一个查询我如何查找其员工平均薪水大于或等于$ 10,000个所有部门。名称应显示查找平均在表

到目前为止,我已经尝试

SELECT DEPARTMENT_ID AS depts, SALARAY 
FROM bliu.employees 
WHERE salary >= 10000 
JOIN departments 
WHERE DEPARTMENT_ID = depts 

它没有不会工作

谢谢!

+0

SQL Server或MySQL?不是一回事。你试过什么了? – Andrew 2014-10-16 22:15:57

+1

我有一种感觉,我们可能不应该做你的作业 – Strawberry 2014-10-16 22:16:12

+0

它是一个Mysql,我试图加入他们,但它并没有工作 – user2578273 2014-10-16 22:18:32

回答

1

这是非常基本的SQL,我猜测练习的要点是使用GROUP BY ... HAVING语法。

SELECT 
    D.DEPARTMENT_NAME,     -- what column to show 
    AVG(E.SALARY) AS AverageSalary  -- strictly not needed, but nice to show 
FROM DEPARTMENTS AS D    -- from what table, using an alias (D) 
JOIN EMPLOYEES AS E     -- join the emp table (E) to get salaries 
ON D.DEPARTMENT_ID = E.DEPARTMENT_ID -- join on this condition (dept_id equality) 
GROUP BY D.DEPARTMENT_ID    -- group the data by department 
HAVING AVG(E.SALARY) >= 10000  -- and filter the groups 
            -- for avg(salary) >= 10000 
+0

+1,内置意见的评论很好 – radar 2014-10-16 22:39:21

+0

@RADAR谢谢。我猜这是一个家庭作业或练习类型的问题,所以我觉得像添加一些解释会很好,而不是只是倾倒查询:) – jpw 2014-10-16 22:40:40