ORACLE: не выражение GROUP BY - PullRequest
       1

ORACLE: не выражение GROUP BY

0 голосов
/ 25 апреля 2018

Я пытаюсь понять это, но продолжаю получать эту ошибку.Я знаю, что это как-то связано с подзапросами в предложениях 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
        ;

образец:

1 Ответ

0 голосов
/ 25 апреля 2018

Надеюсь, у вас пока отличная неделя. :)

Просто напрашивайтесь на запрос, вы испытываете ошибку, потому что вы не можете 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
        ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...