Это исключение возникает, когда в условии GROUP BY отсутствуют некоторые столбцы. В вашем случае вы пропустили один столбец.
Внутренняя работа & Root Причина:
Для выполнения этого запроса SQL Двигатель сначала вычисляет набор данных. Здесь присутствует только одна проекция (столбец), а именно. EMPLOYEE_ID. После получения этого начального набора данных механизм SQL далее пытается кластеризовать записи, т.е. группирует их на основе столбца job_type, чтобы выполнить условие GROUP BY в вашем запросе. В этот момент ваш запрос встречается с исключением, поскольку столбец job_type отсутствует в вашем наборе результатов.
Более того, ваше предложение GROUP BY ожидает только выбранные столбцы, и их порядок определяет их приоритеты при группировке, то есть упомянутый столбец будет получите наивысший приоритет, а последний последним будет иметь наименьшее значение.
Решение:
Измените ваш запрос следующим образом -
Select job_type, job, max(employee_id) from bank_data group by job_type, job having job in ('Engineer' , 'Artist');
Это исключит это исключение (Пожалуйста, измените порядок столбцов в предложении GROUP BY в соответствии с желаемыми приоритетами.
Конечно, вам нужно отфильтровать только соответствующие прогнозы (для этого полезны псевдонимы) в вашем конечном наборе результатов и для достижения этого вам нужно вложить этот запрос во внешний запрос.
Таким образом, ваш окончательный запрос будет выглядеть примерно так:
Select my_col from (select job_type, job, max(employee_id) as my_col from bank_data group by job_type, job having job in ('Engineer', 'Artist'));
Примечание:
Поскольку Oracle (включая другие, такие как MySQL, PostgreSQL, DB2 et c) подпадают под RDBMS (система управления реляционными базами данных) t это может быть не прямой запрос для получения нужных данных, поэтому вы должны проанализировать требования с помощью TR C (Tuple Relational Calculus), а затем вы можете создать соответствующий вложенный запрос на основе полученного выражения TR C. (Это очень полезно при создании сложных запросов).