gpt4 book ai didi

mysql - 如何正确产生对应的SQL

转载 作者:行者123 更新时间:2023-11-29 19:26:16 25 4
gpt4 key购买 nike

致敬,我在为以下请求制定正确的 SQL 查询时遇到问题:

对于每个部门,列出每个十年出生的员 worker 数及其平均工资

现在,我想我需要工资,因为我们需要平均工资,以及部门名称和特定日期出生的人数,这对于选择值来说应该足够了。

但是,我收到以下错误:

错误 1055 (42000):SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列“employees.d.dept_name”,该列在功能上不依赖于 GROUP BY 子句中的列;这与 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 | |
+-----------+---------+------+-----+---------+-------+

描述部门;

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

最后,描述 dept_emp

+-----------+---------+------+-----+---------+-------+
| 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 | |
+-----------+---------+------+-----+---------+-------+

我的查询的正确版本是什么样的?

最佳答案

我相信我已经明白了:

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);

似乎至少产生了一个有效的结果。

关于mysql - 如何正确产生对应的SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42122139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com