3. Написать простой декоратор, измеряющий время выполнения функции

Время функции измеряют perf_counter() в декораторе, а отделы отбирают через GROUP BY и HAVING со сравнением со средней зарплатой всех сотрудников. Это две независимые части приведённого условия.

Короткий ответ

Что ответить на собеседовании

Время функции измеряют perf_counter() в декораторе, а отделы отбирают через GROUP BY и HAVING со сравнением со средней зарплатой всех сотрудников. Это две независимые части приведённого условия.

Подробный разбор

Ответ с пояснениями

Условие

3. Написать простой декоратор, измеряющий время выполнения функции

4. Дано: две таблицы

CREATE TABLE departments (

id SERIAL PRIMARY KEY,

name VARCHAR(100) NOT NULL

);

CREATE TABLE employees (

id SERIAL PRIMARY KEY,

name VARCHAR(100) NOT NULL,

department_id INT NOT NULL REFERENCES departments(id),

salary NUMERIC(10,2) NOT NULL

);

Задание:

Напишите запрос, который выводит названия отделов и их среднюю зарплату, но только для тех отделов, где средняя зарплата выше,

чем средняя зарплата по всем сотрудникам компании. Результат отсортируйте по убыванию средней зарплаты.

Ответ

Время функции измеряют perf_counter() в декораторе, а отделы отбирают через GROUP BY и HAVING со сравнением со средней зарплатой всех сотрудников. Это две независимые части приведённого условия.

Синхронный декоратор измеряет и ошибочные вызовы:

from functools import wraps
from time import perf_counter

def timed(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        started = perf_counter()
        try:
            return func(*args, **kwargs)
        finally:
            print(f'{func.__name__}: {perf_counter() - started:.6f}s')
    return wrapper

SQL сравнивает с общей средней по людям, а не со средней средних отделов:

SELECT d.name, AVG(e.salary) AS average_salary
FROM departments AS d
JOIN employees AS e ON e.department_id = d.id
GROUP BY d.id, d.name
HAVING AVG(e.salary) > (SELECT AVG(salary) FROM employees)
ORDER BY average_salary DESC;

Для async-функции нужен отдельный async wrapper с await.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее