Sql 为什么列不包括在group by所需的结果集中?

Sql 为什么列不包括在group by所需的结果集中?,sql,Sql,考虑以下人为的SQL语句: 选择e.job\u title, 当e.is|u full|u time='Y'然后e.name | | full time'或者e.name | | part time'结束时, 蒙特利价值 来自雇员e c.employee_id=e.id上的内部连接车c 按e.job_标题分组, e、 是全职的吗, e、 姓名; 既然group by将基于结果而不是检查进行聚合,那么为什么e.是否需要全部时间?SQL在选择前执行group by,因此,如果它在SELECT子句中看

考虑以下人为的SQL语句:

选择e.job\u title, 当e.is|u full|u time='Y'然后e.name | | full time'或者e.name | | part time'结束时, 蒙特利价值 来自雇员e c.employee_id=e.id上的内部连接车c 按e.job_标题分组, e、 是全职的吗, e、 姓名;
既然group by将基于结果而不是检查进行聚合,那么为什么e.是否需要全部时间?

SQL在选择前执行group by,因此,如果它在SELECT子句中看到一个不在GROUP BY子句中的非聚合列,它就会抱怨。

假设您的数据中有两个名称相同但时间值不同的记录,那么应该在SELECT子句中计算哪一个?为避免任何含糊不清或推定的机会,SELECT中的所有表达式必须是GROUP BY中的me或集合。有些系统会更灵活一些,比如说,选择一个组中的第一个结果,或者任意选择一个,但是大多数企业级数据库都强制执行这一要求

避免使用不必要的GROUP BY表达式的一种方法是使用子查询:

SELECT e.job_title,
       CASE WHEN e.is_full_time = 'Y' THEN e.name || ' full time' ELSE e.name || ' part time' END,
       c.monterary_value
FROM employee e
INNER JOIN (
    SELECT employee_id, SUM(monterary_value) monterary_value 
    FROM car  
    GROUP BY employee_id ) c
  ON c.employee_id = e.id

案例的结果取决于e.name和e.is_full_time,可能有两行名称相同,但Y/N不同。e.is_full_time包含在结果集中的方式与包含e.name的方式相同-作为表达式的一部分。@dnoeth谢谢您,现在您已经解释清楚了。如果你想把你的答案正式化,我会接受的。好吧,有些系统只有一个,MySQL:-@dnoeth FoxPro也有: