【问题标题】:SQL join query with group by clause?使用group by子句的SQL连接查询?
【发布时间】:2016-01-12 06:58:43
【问题描述】:
SELECT e.employee_id, e.last_name, e.salary, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_id, d.department_name; 

输出:

SQL> SELECT e.employee_id, e.last_name, e.salary, e.department_id, d.department_name
  2  FROM employees e, departments d
  3  WHERE e.department_id = d.department_id
  4  GROUP BY d.department_id, d.department_name;
SELECT e.employee_id, e.last_name, e.salary, e.department_id, d.department_name
       *
ERROR at line 1:
ORA-00979: not a GROUP BY expression

这段代码有什么问题? 我想要所有的 cloumn (e.employee_id, e.last_name, e.salary, e.department_id, d.department_name) 并且还想 group by 与 (d.department_id, d.department_name) 有没有可能?

【问题讨论】:

  • 你得到什么输出?你的预期输出是什么?
  • SELECT e.employee_id, e.last_name, e.salary, e.department_id, d.department_name * 第 1 行出现错误:ORA-00979:不是 GROUP BY 表达式
  • 我希望所有列都作为输出并仅按 (d.department_id, d.department_name) 分组...这可能吗?
  • 不,这是不可能的。
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(20 多年前),不鼓励使用它

标签: sql oracle11g


【解决方案1】:

参考此代码。它会工作的。

SELECT e.id, e.name, e.salary, e.did, d.dname
FROM [dbo].[Table_1] e join [dbo].[Table_2] d
on e.did = d.did
GROUP BY e.id, e.name, e.salary, e.did, d.dname;

SELECT e.id, e.name, e.salary, e.did, d.dname
FROM [dbo].[Table_1] e , [dbo].[Table_2] d
WHERE  e.did = d.did
GROUP BY e.id, e.name, e.salary, e.did, d.dname;

【讨论】:

    【解决方案2】:

    您只能选择 group by 子句中的列。

    【讨论】:

      【解决方案3】:

      作为 GROUP BY 子句的规则,您应该包括所有不属于聚合的列。在这种情况下,您需要在 GROUP BY 子句中包含所有列

      【讨论】:

        【解决方案4】:

        尝试以下任何一种:

        SELECT e.employee_id, e.last_name, e.salary, e.department_id, d.department_name
        FROM employees e, departments d
        WHERE e.department_id = d.department_id
        GROUP BY e.employee_id, e.last_name, e.salary, e.department_id, d.department_name;
        

        SELECT e.employee_id, e.last_name, SUM(e.salary), e.department_id, d.department_name
        FROM employees e, departments d
        WHERE e.department_id = d.department_id
        GROUP BY e.employee_id, e.last_name, e.department_id, d.department_name;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-17
          • 2017-01-10
          • 2016-05-09
          • 1970-01-01
          • 2019-07-13
          相关资源
          最近更新 更多