Нет стандартного способа сделать это. Вы должны сохранить длину выделенной памяти в другой переменной или использовать «контейнер», который отслеживает вас.
На некоторых платформах есть функции для поиска количества байтов в распределении, например. Symbian как функция AllocSize(ptr)
.
Вам нужен подзапрос:
SELECT e.DEPARTMENT_ID, e.FIRST_NAME, e.LAST_NAME
FROM EMPLOYEES e
WHERE e.DEPARTMENT_ID IN (SELECT e1.DEPARTMENT_ID
FROM EMPLOYEES e1
GROUP BY e1.DEPARTMENT_ID
HAVING AVG(e1.SALARY) < 12000
)
ORDER BY e.LAST_NAME ASC;
Вам нужна средняя зарплата для отдела. Я бы использовал оконную функцию:
SELECT DEPARTMENT_ID, FIRST_NAME, LAST_NAME
FROM (SELECT e.*, AVG(SALARY) OVER (PARTITION BY DEPARTMENT_ID) as avg_salary_dept
FROM EMPLOYEES e
) e
WHERE avg_salary_dept < 12000
ORDER BY LAST_NAME ASC;
Вы можете использовать коррелированный подзапрос
SELECT e.DEPARTMENT_ID, e.FIRST_NAME, e.LAST_NAME
FROM EMPLOYEES a
WHERE exists (SELECT 1 FROM EMPLOYEES b
where a.department_id=b.department_id
HAVING AVG(b.SALARY) < 12000
);
.