ls
Size: a a a
PM
PM
PM
PM
NI
AS
CREATE TABLE DEPARTMENT (нужен запрос, в результате которого будет выборка следующего вида:
DEPARTMENTID INT(6) UNSIGNED PRIMARY KEY,
DEPARTMENTNAME VARCHAR(30) NOT NULL
);
CREATE TABLE PERSON (
PERSONID INT(10) UNSIGNED PRIMARY KEY,
PERSONNAME VARCHAR(30) NOT NULL,
DEPARTMENTID INT(6) UNSIGNED NOT NULL,
FOREIGN KEY (DEPARTMENTID) REFERENCES DEPARTMENT(DEPARTMENTID)
);
CREATE TABLE SALARY (
PERSONID INT(6) UNSIGNED,
SALARY INT(6) UNSIGNED NOT NULL,
FOREIGN KEY (PERSONID) REFERENCES PERSON(PERSONID)
);
INSERT INTO DEPARTMENT (DEPARTMENTID, DEPARTMENTNAME)
VALUE (1, 'Бухгалтерия'), (2, 'Поставки');
INSERT INTO PERSON (PERSONID, PERSONNAME, DEPARTMENTID)
VALUE (1, 'Иванов', 1), (2, 'Петров', 1), (3, 'Сидоров', 2);
INSERT INTO SALARY (PERSONID, SALARY)
VALUE (1, 10000), (2, 20000), (3, 23000);
M
CREATE TABLE DEPARTMENT (нужен запрос, в результате которого будет выборка следующего вида:
DEPARTMENTID INT(6) UNSIGNED PRIMARY KEY,
DEPARTMENTNAME VARCHAR(30) NOT NULL
);
CREATE TABLE PERSON (
PERSONID INT(10) UNSIGNED PRIMARY KEY,
PERSONNAME VARCHAR(30) NOT NULL,
DEPARTMENTID INT(6) UNSIGNED NOT NULL,
FOREIGN KEY (DEPARTMENTID) REFERENCES DEPARTMENT(DEPARTMENTID)
);
CREATE TABLE SALARY (
PERSONID INT(6) UNSIGNED,
SALARY INT(6) UNSIGNED NOT NULL,
FOREIGN KEY (PERSONID) REFERENCES PERSON(PERSONID)
);
INSERT INTO DEPARTMENT (DEPARTMENTID, DEPARTMENTNAME)
VALUE (1, 'Бухгалтерия'), (2, 'Поставки');
INSERT INTO PERSON (PERSONID, PERSONNAME, DEPARTMENTID)
VALUE (1, 'Иванов', 1), (2, 'Петров', 1), (3, 'Сидоров', 2);
INSERT INTO SALARY (PERSONID, SALARY)
VALUE (1, 10000), (2, 20000), (3, 23000);
SELECT P.PERSONNAME, D.DEPARTMENTNAME, S.SALARY,AverageSalaryForDep.AverageSALARY
FROM PERSON P
INNER JOIN DEPARTMENT D ON P.DEPARTMENTID = D.DEPARTMENTID
INNER JOIN SALARY S ON P.PERSONID = S.PERSONID
INNER JOIN (SELECT DEPARTMENTID, AVG(SALARY) AS AverageSALARY FROM SALARY ST
INNER JOIN PERSON PT ON PT.PERSONID = ST.PERSONID
GROUP BY DEPARTMENTID) as AverageSalaryForDep on AverageSalaryForDep.DEPARTMENTID = P.DEPARTMENTID;
M
+------------+----------------+--------+---------------+
| PERSONNAME | DEPARTMENTNAME | SALARY | AverageSALARY |
+------------+----------------+--------+---------------+
| Ivanov | Bookkeeping | 10000 | 15000.0000 |
| Petrov | Bookkeeping | 20000 | 15000.0000 |
| Sidorov | Supplies | 23000 | 23000.0000 |
+------------+----------------+--------+---------------+
3 rows in set (0.00 sec)
AS
SELECT P.PERSONNAME, D.DEPARTMENTNAME, S.SALARY,AverageSalaryForDep.AverageSALARY
FROM PERSON P
INNER JOIN DEPARTMENT D ON P.DEPARTMENTID = D.DEPARTMENTID
INNER JOIN SALARY S ON P.PERSONID = S.PERSONID
INNER JOIN (SELECT DEPARTMENTID, AVG(SALARY) AS AverageSALARY FROM SALARY ST
INNER JOIN PERSON PT ON PT.PERSONID = ST.PERSONID
GROUP BY DEPARTMENTID) as AverageSalaryForDep on AverageSalaryForDep.DEPARTMENTID = P.DEPARTMENTID;
SELECT P.PERSONNAME, D.DEPARTMENTNAME, S.SALARY,
( SELECT AVG(SALARY) FROM SALARY )
AS AVGSALARY FROM PERSON P
LEFT OUTER JOIN DEPARTMENT D ON P.DEPARTMENTID = D.DEPARTMENTID
LEFT OUTER JOIN SALARY S ON P.PERSONID = S.PERSONID;
AS
AS
AS
AS