В области SQL существует несколько расширенных функций, которые часто остаются недостаточно используемыми, несмотря на их потенциал для оптимизации анализа данных, повышения производительности и выполнения более сложных запросов. Давайте углубимся в некоторые из этих менее известных функций SQL, которые могут расширить ваши возможности анализа данных:

Давай начнем

1. Функции окна:

Оконные функции позволяют выполнять вычисления по набору строк, связанных с текущей строкой. Эти функции могут значительно упростить сложные запросы, включающие ранжирование, накопленные суммы, скользящие средние и многое другое.

Пример: расчет промежуточной суммы

SELECT
    date,
    revenue,
    SUM(revenue) OVER (ORDER BY date) AS running_total
FROM
    sales_data;

2. Рекурсивные общие табличные выражения (CTE)

Рекурсивные CTE позволяют просматривать иерархические или рекурсивные структуры данных, такие как организационные диаграммы, спецификации и т. д.

Пример: рекурсивный факторный расчет

WITH RECURSIVE factorial(n, value) AS (
    SELECT 1, 1
    UNION ALL
    SELECT n + 1, n * value FROM factorial WHERE n < 10
)
SELECT value FROM factorial;

3. Функции JSON

Современные базы данных поддерживают типы данных JSON, а SQL предоставляет функции для управления и запроса данных JSON непосредственно в ваших запросах.

Пример: извлечение данных JSON

SELECT
    json_data->>'$.name' AS name,
    json_data->>'$.age' AS age
FROM
    json_table;

4. Функция STRING_AGG

STRING_AGG позволяет объединять значения из нескольких строк в одну строку, что полезно для создания списков, разделенных запятыми, или объединенного текста.

Пример: объединение имен сотрудников

SELECT
    department,
    STRING_AGG(employee_name, ', ') AS employees
FROM
    employee_data
GROUP BY
    department;

5. Функции LAG и LEAD

Функции LAG и LEAD позволяют получить доступ к значениям из предыдущих или последующих строк в наборе результатов, что помогает проводить временной анализ и выявлять тенденции.

Пример: расчет ежемесячного роста

SELECT
    date,
    revenue,
    LAG(revenue) OVER (ORDER BY date) AS prev_month_revenue,
    (revenue - LAG(revenue) OVER (ORDER BY date)) / LAG(revenue) OVER (ORDER BY date) AS mom_growth
FROM
    sales_data;

6. Предложение FILTER с агрегатными функциями

Предложение FILTER позволяет применять агрегатные функции только к определенным строкам, которые соответствуют определенному условию, что повышает гибкость агрегатов.

Пример: средний доход для ценных клиентов

SELECT
    customer_id,
    AVG(revenue) FILTER (WHERE revenue > 1000) AS avg_high_value_revenue
FROM
    sales_data
GROUP BY
    customer_id;

7. Функции МАССИВ

Некоторые базы данных поддерживают типы данных ARRAY и предоставляют функции для управления массивами непосредственно в запросах SQL.

Пример: поиск общих элементов в массивах

SELECT
    user_id,
    ARRAY_INTERSECT(purchased_items, recommended_items) AS common_items
FROM
    user_purchase_history;

8. Процентиль Cont и процентиль Диск

Эти функции позволяют рассчитывать значения процентилей для данного набора данных, помогая анализировать характеристики распределения.

Пример: расчет медианы и 75-го процентиля

SELECT
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY score) AS median,
    PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY score) AS 75th_percentile
FROM
    exam_scores;

9. STRING_TO_ARRAY и ARRAY_TO_STRING:

При работе с массивами эти функции упрощают преобразование строк в массивы и наоборот, обеспечивая более гибкие возможности манипулирования данными.

Пример: преобразование значений, разделенных запятыми, в массив

SELECT
    student_name,
    STRING_TO_ARRAY(subjects, ', ') AS subject_list
FROM
    student_subjects;

10. Регулярные выражения (REGEXP)

Регулярные выражения позволяют эффективно сопоставлять шаблоны с текстовыми данными, помогая извлекать и очищать данные.

Пример: извлечение номеров телефонов

SELECT
    customer_name,
    REGEXP_SUBSTR(contact_info, '\d{3}-\d{3}-\d{4}') AS phone_number
FROM
    customer_contacts;

11. БОКОВЫЕ объединения

ЛАТЕРАЛЬНЫЕ соединения позволяют сопоставлять результаты подзапроса со строками основного запроса, что полезно для сложных вычислений, включающих коррелированные подзапросы.

Пример: расчет скользящих средних

SELECT
    timestamp,
    value,
    AVG(value) OVER (
        ORDER BY timestamp
        RANGE BETWEEN INTERVAL '1 day' PRECEDING AND CURRENT ROW
    ) AS moving_average
FROM
    sensor_data;

12. Общие табличные выражения (CTE) для сложных запросов

CTE можно использовать не только для рекурсивных запросов. Они также могут упростить сложные запросы, разбивая их на более мелкие и более управляемые части.

Пример: анализ тенденций продаж

WITH sales_summary AS (
    SELECT
        date,
        SUM(revenue) AS daily_revenue
    FROM
        sales_data
    GROUP BY
        date
)
SELECT
    date,
    daily_revenue,
    AVG(daily_revenue) OVER (
        ORDER BY date
        RANGE BETWEEN INTERVAL '7 days' PRECEDING AND CURRENT ROW
    ) AS 7_day_avg_revenue
FROM
    sales_summary;

13. Предложение HAVING с оконными функциями

Объедините предложение HAVING с оконными функциями для фильтрации агрегированных результатов на основе оконных вычислений.

Пример: выявление изменений в поведении клиентов

SELECT
    customer_id,
    AVG(order_amount) AS avg_order_amount,
    MIN(order_amount) AS min_order_amount
FROM
    orders
GROUP BY
    customer_id
HAVING
    MAX(order_amount) - MIN(order_amount) > 100;

Эти расширенные функции SQL расширяют ваши возможности в манипулировании, анализе и преобразовании данных. Включение этих функций в ваш набор инструментов позволит вам справляться со сложными сценариями и получать более глубокое понимание ваших данных.

Приятного обучения