sql - ORACLE:不是 GROUP BY 表达式
问题描述
我试图弄清楚这一点,但我不断收到此错误。我知道这与 SELECT 和 HAVING 子句中的子查询有关,但我不知道如何修复它们。任何帮助将不胜感激。
部门表:https ://gyazo.com/f9d782abd428acc7ec2e7d5d59befad7
员工表:https ://gyazo.com/b2d7d792c0933b13d6fdd7166fffb8a6
预期输出:https ://gyazo.com/41f6a5626a5827acbe76e3c41287742d
编辑:我想出了另一种语法!感谢所有的帮助!
CURSOR c_emp (p_total_emp NUMBER) IS
SELECT department.DEPARTMENT_NAME
, MAX(employee.HIRE_DATE)
, (SELECT COUNT(EMPLOYEE_ID)
FROM employee
HAVING HIRE_DATE = MAX(HIRE_DATE))
, ROUND(MAX(employee.SALARY))
, ROUND(MAX(employee.SALARY) * 0.68)
, (SELECT COUNT(EMPLOYEE_ID)
FROM employee
HAVING SALARY > ROUND(MAX(employee.SALARY) * 0.68))
FROM employee
INNER JOIN department
ON employee.DEPARTMENT_ID = department.DEPARTMENT_ID
GROUP BY 1
HAVING (SELECT COUNT(EMPLOYEE_ID)
FROM employee
HAVING SALARY > ROUND(MAX(employee.SALARY) * 0.68)) > p_total_emp
ORDER BY DEPARTMENT_NAME ASC
;
样本:
解决方案
希望到目前为止你度过了愉快的一周。:)
只是对查询的提醒,您遇到了错误,因为您不能 GROUP BY 1。您需要对未聚合的列进行 GROUP BY。(例如,department.DEPARTMENT_NAME),如下所示:-
CURSOR c_emp (p_total_emp NUMBER) IS
SELECT department.DEPARTMENT_NAME
, MAX(employee.HIRE_DATE)
, (SELECT COUNT(EMPLOYEE_ID)
FROM employee
HAVING HIRE_DATE = MAX(HIRE_DATE))
, ROUND(MAX(employee.SALARY))
, ROUND(MAX(employee.SALARY) * 0.68)
, (SELECT COUNT(EMPLOYEE_ID)
FROM employee
HAVING SALARY > ROUND(MAX(employee.SALARY) * 0.68))
FROM employee
INNER JOIN department
ON employee.DEPARTMENT_ID = department.DEPARTMENT_ID
GROUP BY department.DEPARTMENT_NAME
HAVING (SELECT COUNT(EMPLOYEE_ID)
FROM employee
HAVING SALARY > ROUND(MAX(employee.SALARY) * 0.68)) > p_total_emp
ORDER BY DEPARTMENT_NAME ASC
;
推荐阅读
- javascript - 根据表格行中的文本查找表格中的行,输出视图链接
- java - 在 textview Android 中显示来自 URL 的图像
- c# - 无法添加实体类型“Animal”的种子实体,因为没有为所需的属性“Id”提供值。
- javascript - 如何在 JavaScript 中从外部 vue 应用程序调用自定义 Vue 3 方法?
- python - 如何在 Django 中对特定月份的时间值求和?
- c - 返回指向局部变量排序合并的指针
- java - 如何配置反应式资源服务器以使用具有对称密钥的 JWT?
- javascript - 用户单击按钮时如何创建随机页面?
- javascript - 使用 Puppeteer 加载 VueJS 和 Vuetify 应用程序
- google-apps-script - Google Sheets Filtered View prevents app script to get correct cell by getRow