2017-02-08 14 views
0

礼拝を生成するために、どのように、私はトラブル次のリクエストのための正しいSQLクエリ策定持っています:各部門の適切に対応するSQLに

を、リストの各十年に生まれた従業員の数とその平均給与

今私は給与が必要であると思った。 と部門名と特定の日付に生まれた人の数が選択値の点で十分であるはずだからだ。

しかし、私は次のエラーを取得しています:

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'employees.d.dept_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

これは私が試みSQL:

SELECT DISTINCT d.dept_name, AVG(s.salary), COUNT(e.birth_date) 
     FROM employees e, departments d, salaries s, dept_emp de 
     WHERE de.emp_no = e.emp_no 
     AND de.dept_no = d.dept_no 
     GROUP BY ROUND(YEAR(e.birth_date), -1); 

私はSQLに新しいブランドです、ので、これはと私のためにやや困難です教授は適切にSQL構文を適切に生成する方法を説明していません。

表の説明は次のとおりです。

は従業員を表します。

+------------+---------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+------------+---------------+------+-----+---------+-------+ 
| emp_no  | int(11)  | NO | PRI | NULL |  | 
| birth_date | date   | NO |  | NULL |  | 
| first_name | varchar(14) | NO |  | NULL |  | 
| last_name | varchar(16) | NO |  | NULL |  | 
| gender  | enum('M','F') | NO |  | NULL |  | 
| hire_date | date   | NO |  | NULL |  | 
+------------+---------------+------+-----+---------+-------+ 

説明給与;

+-----------+---------+------+-----+---------+-------+ 
| Field  | Type | Null | Key | Default | Extra | 
+-----------+---------+------+-----+---------+-------+ 
| emp_no | int(11) | NO | PRI | NULL |  | 
| salary | int(11) | NO |  | NULL |  | 
| from_date | date | NO | PRI | NULL |  | 
| to_date | date | NO |  | NULL |  | 
+-----------+---------+------+-----+---------+-------+ 

departments;

+-----------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-----------+-------------+------+-----+---------+-------+ 
| dept_no | char(4)  | NO | PRI | NULL |  | 
| dept_name | varchar(40) | NO | UNI | NULL |  | 
+-----------+-------------+------+-----+---------+-------+ 

、最終的には、

+-----------+---------+------+-----+---------+-------+ 
| Field  | Type | Null | Key | Default | Extra | 
+-----------+---------+------+-----+---------+-------+ 
| emp_no | int(11) | NO | PRI | NULL |  | 
| dept_no | char(4) | NO | PRI | NULL |  | 
| from_date | date | NO |  | NULL |  | 
| to_date | date | NO |  | NULL |  | 
+-----------+---------+------+-----+---------+-------+ 

dept_empを記述する方法私のクエリの正しいバージョンがどのように見えるのでしょうか?

答えて

0

私はそれを考え出したと信じて:

SELECT DISTINCT d.dept_name, AVG(s.salary), ROUND(YEAR(e.birth_date), -1) 
FROM employees e, departments d, salaries s, dept_emp de 
WHERE de.emp_no = e.emp_no 
AND de.dept_no = d.dept_no 
AND e.emp_no = s.emp_no 
GROUP BY d.dept_name, ROUND(YEAR(e.birth_date), -1); 

は、少なくともvalidishでアウトを生成するようです。

関連する問題