CREATE SQL — большая подборка «живых» примеров из практики

🟢 CREATE SQL. Введение

CREATE — оператор из подмножества DDL (Data Definition Language), применяемый для описания структуры данных и создания объектов базы.
В статье представлена — большая подборка «живых» сценариев: от операционных таблиц до аналитических витрин.

В экосистеме SQL объекты охватывают таблицы (TABLE), представления (VIEW), индексы (INDEX), а также ограничения целостности
(PRIMARY KEY, FOREIGN KEY REFERENCES, CHECK, NOT NULL).
Для аналитики часто используется подход AS SELECT (CTAS) — материализация результатов запроса в отдельную таблицу.
Все примеры оформлены по лучшим практикам: ключевые слова SELECT / FROM / JOIN / WHERE / GROUP BY / HAVING / ORDER BY — с новой строки, ровные отступы и выравнивание.

Синтаксис

CREATE <тип_объекта> имя_объекта [параметры];

Типовая конструкция

CREATE TABLE table_name (
    id      INTEGER PRIMARY KEY,
    name    VARCHAR(100) NOT NULL,
    created DATE
);

Операционные таблицы (20)

1. Карточка сотрудника с датой найма и email:

CREATE TABLE hr_employee (
    employee_id INTEGER PRIMARY KEY,
    full_name   VARCHAR(120)  NOT NULL,
    hire_date   DATE          NOT NULL,
    email       VARCHAR(180)
);

2. Номенклатура товаров с артикулом и ставкой НДС:

CREATE TABLE pr_product (
    product_id   INTEGER PRIMARY KEY,
    sku          VARCHAR(50)   NOT NULL,
    title        VARCHAR(200)  NOT NULL,
    price        DECIMAL(12,2) NOT NULL,
    vat_rate     DECIMAL(4,2)  NOT NULL
);

3. Заказ клиента с датой оформления и итогом:

CREATE TABLE ord_order (
    order_id     INTEGER PRIMARY KEY,
    customer_id  INTEGER        NOT NULL,
    ordered_at   TIMESTAMP      NOT NULL,
    grand_total  DECIMAL(14,2)  NOT NULL
);

4. Справочник стран по ISO‑коду:

CREATE TABLE geo_country (
    iso2  CHAR(2)      PRIMARY KEY,
    name  VARCHAR(120) NOT NULL
);

5. Город с привязкой к стране:

CREATE TABLE geo_city (
    city_id   INTEGER PRIMARY KEY,
    iso2      CHAR(2)      NOT NULL,
    city_name VARCHAR(120) NOT NULL
);

6. Аккаунт CRM с сегментом:

CREATE TABLE crm_account (
    account_id INTEGER PRIMARY KEY,
    name       VARCHAR(200) NOT NULL,
    segment    VARCHAR(40)
);

7. Сделка CRM со стадией и суммой:

CREATE TABLE crm_deal (
    deal_id     INTEGER PRIMARY KEY,
    account_id  INTEGER       NOT NULL,
    stage       VARCHAR(30)   NOT NULL,
    amount      DECIMAL(14,2) NOT NULL,
    opened_at   DATE          NOT NULL
);

8. Платёжная транзакция и способ оплаты:

CREATE TABLE pay_tx (
    tx_id       INTEGER PRIMARY KEY,
    order_id    INTEGER       NOT NULL,
    method      VARCHAR(30)   NOT NULL,
    captured_at TIMESTAMP,
    amount      DECIMAL(14,2) NOT NULL
);

9. Остаток товара на складе (по складу и товару):

CREATE TABLE wh_on_hand (
    warehouse_id INTEGER      NOT NULL,
    product_id   INTEGER      NOT NULL,
    qty_on_hand  INTEGER      NOT NULL,
    PRIMARY KEY (warehouse_id, product_id)
);

10. Назначение сотрудника в отдел:

CREATE TABLE org_assignment (
    assignment_id INTEGER PRIMARY KEY,
    employee_id   INTEGER       NOT NULL,
    department    VARCHAR(80)   NOT NULL,
    started_on    DATE          NOT NULL
);

11. Публикация в блоге с автором и датой:

CREATE TABLE blog_post (
    post_id    INTEGER PRIMARY KEY,
    title      VARCHAR(200) NOT NULL,
    author     VARCHAR(120),
    published  DATE
);

12. Комментарий к посту с датой создания:

CREATE TABLE blog_comment (
    comment_id INTEGER PRIMARY KEY,
    post_id    INTEGER       NOT NULL,
    author     VARCHAR(120)  NOT NULL,
    body       VARCHAR(4000) NOT NULL,
    created_at TIMESTAMP     NOT NULL
);

13. Пациент клиники с датой рождения:

CREATE TABLE med_patient (
    patient_id INTEGER PRIMARY KEY,
    full_name  VARCHAR(140) NOT NULL,
    birth_date DATE         NOT NULL,
    gender     VARCHAR(10)
);

14. Визит пациента с диагнозом:

CREATE TABLE med_visit (
    visit_id    INTEGER PRIMARY KEY,
    patient_id  INTEGER      NOT NULL,
    doctor_name VARCHAR(120) NOT NULL,
    visited_at  TIMESTAMP    NOT NULL,
    diagnosis   VARCHAR(400)
);

15. Телеметрия IoT‑датчика (метрика/значение/время):

CREATE TABLE iot_telemetry (
    reading_id  INTEGER PRIMARY KEY,
    device_id   VARCHAR(60)   NOT NULL,
    observed_at TIMESTAMP     NOT NULL,
    metric      VARCHAR(40)   NOT NULL,
    value       DECIMAL(16,6) NOT NULL
);

16. Занятие с кодом курса и аудиторией:

CREATE TABLE edu_lesson (
    lesson_id   INTEGER PRIMARY KEY,
    course_code VARCHAR(40)  NOT NULL,
    starts_at   TIMESTAMP    NOT NULL,
    room        VARCHAR(40)
);

17. Запись студента на занятие (многие‑ко‑многим):

CREATE TABLE edu_enrollment (
    student_id  INTEGER NOT NULL,
    lesson_id   INTEGER NOT NULL,
    enrolled_on DATE    NOT NULL,
    PRIMARY KEY (student_id, lesson_id)
);

18. Приёмка на склад (inbound):

CREATE TABLE wh_inbound (
    inbound_id   INTEGER PRIMARY KEY,
    warehouse_id INTEGER      NOT NULL,
    arrived_on   DATE         NOT NULL,
    reference    VARCHAR(80)
);

19. Отгрузка со склада (outbound):

CREATE TABLE wh_outbound (
    outbound_id  INTEGER PRIMARY KEY,
    warehouse_id INTEGER      NOT NULL,
    shipped_on   DATE         NOT NULL,
    reference    VARCHAR(80)
);

20. Тариф подписки и ежемесячная стоимость:

CREATE TABLE sub_plan (
    plan_code   VARCHAR(20)   PRIMARY KEY,
    title       VARCHAR(100)  NOT NULL,
    monthly_fee DECIMAL(10,2) NOT NULL
);

Ограничения целостности (20)

21. Город ссылается на существующую страну (FK):

CREATE TABLE geo_city_ref (
    city_id   INTEGER PRIMARY KEY,
    iso2      CHAR(2)      NOT NULL,
    city_name VARCHAR(120) NOT NULL,
    CONSTRAINT fk_city_country
        FOREIGN KEY (iso2) REFERENCES geo_country(iso2)
);

22. Составной ключ: остаток на складе:

CREATE TABLE wh_item_pk (
    warehouse_id INTEGER NOT NULL,
    product_id   INTEGER NOT NULL,
    qty          INTEGER NOT NULL,
    CONSTRAINT pk_wh_item PRIMARY KEY (warehouse_id, product_id)
);

23. Имя автора обязательно и непусто:

CREATE TABLE lib_author (
    author_id INTEGER PRIMARY KEY,
    name      VARCHAR(160) NOT NULL,
    CONSTRAINT chk_author_name CHECK (name <> '')
);

24. Скидка в заказе: процент или сумма:

CREATE TABLE ord_discount (
    order_id INTEGER PRIMARY KEY,
    kind     VARCHAR(10)  NOT NULL,
    value    DECIMAL(8,2) NOT NULL,
    CONSTRAINT chk_discount CHECK (
        (kind = 'PCT' AND value BETWEEN 0 AND 100) OR
        (kind = 'ABS' AND value >= 0)
    )
);

25. Контакт доступен: email или телефон:

CREATE TABLE crm_contact (
    contact_id INTEGER PRIMARY KEY,
    email      VARCHAR(200),
    phone      VARCHAR(30),
    CONSTRAINT chk_contact_reach CHECK (email IS NOT NULL OR phone IS NOT NULL)
);

26. Уникальный номер полиса пациента:

CREATE TABLE med_policy (
    policy_no  VARCHAR(40) PRIMARY KEY,
    patient_id INTEGER     NOT NULL
);

27. FK платежа на существующий заказ:

CREATE TABLE pay_tx_ref (
    tx_id    INTEGER PRIMARY KEY,
    order_id INTEGER NOT NULL,
    amount   DECIMAL(14,2) NOT NULL,
    CONSTRAINT fk_tx_order
        FOREIGN KEY (order_id) REFERENCES ord_order(order_id)
);

28. Валидация посещения урока (двойной FK):

CREATE TABLE edu_attendance (
    student_id INTEGER NOT NULL,
    lesson_id  INTEGER NOT NULL,
    status     VARCHAR(12) NOT NULL,
    CONSTRAINT pk_attend PRIMARY KEY (student_id, lesson_id),
    CONSTRAINT fk_attend_student FOREIGN KEY (student_id) REFERENCES med_patient(patient_id),
    CONSTRAINT fk_attend_lesson  FOREIGN KEY (lesson_id)  REFERENCES edu_lesson(lesson_id)
);

29. Статус заказа только из предписанного множества:

CREATE TABLE ord_status (
    order_id INTEGER PRIMARY KEY,
    status   VARCHAR(12) NOT NULL,
    CONSTRAINT chk_status CHECK (status IN ('NEW','PAID','SHIPPED','CLOSED','CANCELLED'))
);

30. Баланс счёта не может быть отрицательным:

CREATE TABLE fin_account (
    account_id INTEGER PRIMARY KEY,
    currency   CHAR(3)       NOT NULL,
    balance    DECIMAL(14,2) NOT NULL,
    CONSTRAINT chk_balance_nonneg CHECK (balance >= 0)
);

31. Пределы метрик IoT (min ≤ max):

CREATE TABLE iot_metric_limits (
    device_id  VARCHAR(60)   PRIMARY KEY,
    metric     VARCHAR(40)   NOT NULL,
    min_value  DECIMAL(10,4) NOT NULL,
    max_value  DECIMAL(10,4) NOT NULL,
    CONSTRAINT chk_min_le_max CHECK (min_value <= max_value)
);

32. Единственный главный офис компании (0/1):

CREATE TABLE org_office (
    office_id INTEGER PRIMARY KEY,
    company   VARCHAR(120) NOT NULL,
    is_hq     INTEGER      NOT NULL,
    CONSTRAINT chk_is_hq CHECK (is_hq IN (0,1))
);

33. Дата начала не позже даты окончания:

CREATE TABLE proj_span (
    span_id   INTEGER PRIMARY KEY,
    starts_on DATE NOT NULL,
    ends_on   DATE NOT NULL,
    CONSTRAINT chk_dates CHECK (starts_on <= ends_on)
);

34. Отгрузка ссылается на склад:

CREATE TABLE wh_ship_ref (
    shipment_id  INTEGER PRIMARY KEY,
    warehouse_id INTEGER NOT NULL,
    shipped_on   DATE    NOT NULL,
    CONSTRAINT fk_ship_wh FOREIGN KEY (warehouse_id) REFERENCES wh_outbound(warehouse_id)
);

35. Название курса не пустое:

CREATE TABLE edu_course_chk (
    code VARCHAR(40) PRIMARY KEY,
    name VARCHAR(200) NOT NULL,
    CONSTRAINT chk_course_name CHECK (name <> '')
);

36. Контроль валюты платежа:

CREATE TABLE fin_payment_ccy (
    payment_id INTEGER PRIMARY KEY,
    account_id INTEGER NOT NULL,
    currency   CHAR(3)  NOT NULL,
    amount     DECIMAL(14,2) NOT NULL
);

37. Соответствие типа ставки НДС и значения:

CREATE TABLE tax_vat_rule (
    rule_id  INTEGER PRIMARY KEY,
    kind     VARCHAR(10)  NOT NULL,
    vat_rate DECIMAL(4,2) NOT NULL,
    CONSTRAINT chk_vat CHECK (
        (kind = 'STANDARD' AND vat_rate >= 10) OR
        (kind = 'REDUCED'  AND vat_rate  < 10)
    )
);

38. Длина кода филиала ограничена:

CREATE TABLE org_branch (
    branch_code VARCHAR(8) PRIMARY KEY,
    name        VARCHAR(120) NOT NULL
);

39. Разрешённость стадии сделки (0/1):

CREATE TABLE crm_stage_rule (
    rule_id INTEGER PRIMARY KEY,
    stage   VARCHAR(30) NOT NULL,
    allowed INTEGER     NOT NULL,
    CONSTRAINT chk_allowed CHECK (allowed IN (0,1))
);

Представления для отчётности (20)

40. Совокупная выручка по клиентам по месяцам №1:

CREATE VIEW vw_sales_month_1 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

41. Совокупная выручка по клиентам по месяцам №2:

CREATE VIEW vw_sales_month_2 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

42. Совокупная выручка по клиентам по месяцам №3:

CREATE VIEW vw_sales_month_3 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

43. Совокупная выручка по клиентам по месяцам №4:

CREATE VIEW vw_sales_month_4 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

44. Совокупная выручка по клиентам по месяцам №5:

CREATE VIEW vw_sales_month_5 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

45. Совокупная выручка по клиентам по месяцам №6:

CREATE VIEW vw_sales_month_6 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

46. Совокупная выручка по клиентам по месяцам №7:

CREATE VIEW vw_sales_month_7 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

47. Совокупная выручка по клиентам по месяцам №8:

CREATE VIEW vw_sales_month_8 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

48. Совокупная выручка по клиентам по месяцам №9:

CREATE VIEW vw_sales_month_9 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

49. Совокупная выручка по клиентам по месяцам №10:

CREATE VIEW vw_sales_month_10 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

50. Совокупная выручка по клиентам по месяцам №11:

CREATE VIEW vw_sales_month_11 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

51. Совокупная выручка по клиентам по месяцам №12:

CREATE VIEW vw_sales_month_12 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

52. Совокупная выручка по клиентам по месяцам №13:

CREATE VIEW vw_sales_month_13 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

53. Совокупная выручка по клиентам по месяцам №14:

CREATE VIEW vw_sales_month_14 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

54. Совокупная выручка по клиентам по месяцам №15:

CREATE VIEW vw_sales_month_15 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

55. Совокупная выручка по клиентам по месяцам №16:

CREATE VIEW vw_sales_month_16 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

56. Совокупная выручка по клиентам по месяцам №17:

CREATE VIEW vw_sales_month_17 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

57. Совокупная выручка по клиентам по месяцам №18:

CREATE VIEW vw_sales_month_18 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

58. Совокупная выручка по клиентам по месяцам №19:

CREATE VIEW vw_sales_month_19 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

59. Совокупная выручка по клиентам по месяцам №20:

CREATE VIEW vw_sales_month_20 AS
SELECT
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at) AS month_start,
    SUM(o.grand_total)                AS revenue
FROM
    ord_order AS o
GROUP BY
    o.customer_id,
    DATE_TRUNC('month', o.ordered_at)
ORDER BY
    o.customer_id,
    month_start;

Индексы для производительности (15)

60. Поиск заказов по клиенту:

CREATE INDEX idx_orders_customer ON ord_order (customer_id);

61. Фильтрация транзакций по методу оплаты:

CREATE INDEX idx_tx_method ON pay_tx (method);

62. Посты блога по дате публикации:

CREATE INDEX idx_posts_published ON blog_post (published);

63. Телеметрия по устройству:

CREATE INDEX idx_readings_device ON iot_telemetry (device_id);

64. Остатки по продукту:

CREATE INDEX idx_stock_product ON wh_on_hand (product_id);

65. Сделки по стадии:

CREATE INDEX idx_deals_stage ON crm_deal (stage);

66. Пациенты по дате рождения:

CREATE INDEX idx_patients_birth ON med_patient (birth_date);

67. Уроки по коду курса:

CREATE INDEX idx_lessons_course ON edu_lesson (course_code);

68. Комментарии по посту:

CREATE INDEX idx_comments_post ON blog_comment (post_id);

69. Визиты по врачу:

CREATE INDEX idx_visits_doctor ON med_visit (doctor_name);

70. Офисы по компании:

CREATE INDEX idx_office_company ON org_office (company);

71. Планы по стоимости:

CREATE INDEX idx_plan_fee ON sub_plan (monthly_fee);

72. Энролменты по занятию:

CREATE INDEX idx_enroll_lesson ON edu_enrollment (lesson_id);

73. Товары по артикулу:

CREATE INDEX idx_sku ON pr_product (sku);

74. Заказы по дате:

CREATE INDEX idx_orders_date ON ord_order (ordered_at);

CTAS — витрины и подготовка данных (15)

75. Витрина среднего чека клиентов №1:

CREATE TABLE mart_avg_check_1 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

76. Витрина среднего чека клиентов №2:

CREATE TABLE mart_avg_check_2 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

77. Витрина среднего чека клиентов №3:

CREATE TABLE mart_avg_check_3 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

78. Витрина среднего чека клиентов №4:

CREATE TABLE mart_avg_check_4 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

79. Витрина среднего чека клиентов №5:

CREATE TABLE mart_avg_check_5 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

80. Витрина среднего чека клиентов №6:

CREATE TABLE mart_avg_check_6 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

81. Витрина среднего чека клиентов №7:

CREATE TABLE mart_avg_check_7 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

82. Витрина среднего чека клиентов №8:

CREATE TABLE mart_avg_check_8 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

83. Витрина среднего чека клиентов №9:

CREATE TABLE mart_avg_check_9 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

84. Витрина среднего чека клиентов №10:

CREATE TABLE mart_avg_check_10 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

85. Витрина среднего чека клиентов №11:

CREATE TABLE mart_avg_check_11 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

86. Витрина среднего чека клиентов №12:

CREATE TABLE mart_avg_check_12 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

87. Витрина среднего чека клиентов №13:

CREATE TABLE mart_avg_check_13 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

88. Витрина среднего чека клиентов №14:

CREATE TABLE mart_avg_check_14 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

89. Витрина среднего чека клиентов №15:

CREATE TABLE mart_avg_check_15 AS
SELECT
    o.customer_id,
    AVG(o.grand_total) AS avg_check
FROM
    ord_order AS o
GROUP BY
    o.customer_id
ORDER BY
    o.customer_id;

Прикладные домены: узкие кейсы (10)

90. Финансы: учёт курсов валют по парам:

CREATE TABLE fx_rate (
    rate_date DATE       NOT NULL,
    base_ccy  CHAR(3)    NOT NULL,
    quote_ccy CHAR(3)    NOT NULL,
    rate      DECIMAL(14,6) NOT NULL,
    PRIMARY KEY (rate_date, base_ccy, quote_ccy)
);

91. Логистика: маршрутная ведомость транспорта:

CREATE TABLE lg_route (
    route_id    INTEGER PRIMARY KEY,
    vehicle_no  VARCHAR(20) NOT NULL,
    planned_on  DATE        NOT NULL,
    driver_name VARCHAR(120) NOT NULL
);

92. Кибербезопасность: лог успешных/неуспешных входов:

CREATE TABLE sec_login (
    event_id  INTEGER PRIMARY KEY,
    user_id   INTEGER      NOT NULL,
    happened  TIMESTAMP    NOT NULL,
    ip_addr   VARCHAR(64)  NOT NULL,
    success   INTEGER      NOT NULL,
    CONSTRAINT chk_success CHECK (success IN (0,1))
);

93. Производство: партии с контролем качества:

CREATE TABLE mfg_batch (
    batch_id    INTEGER PRIMARY KEY,
    product_id  INTEGER      NOT NULL,
    produced_on DATE         NOT NULL,
    quality     VARCHAR(20)  NOT NULL
);

94. Маркетинг: A/B‑тесты и метрика:

CREATE TABLE mkt_ab_test (
    test_id   INTEGER PRIMARY KEY,
    variant   VARCHAR(10)  NOT NULL,
    launched  DATE         NOT NULL,
    metric    VARCHAR(40)  NOT NULL
);

95. Образование: расписание экзаменов:

CREATE TABLE edu_exam (
    exam_id   INTEGER PRIMARY KEY,
    course    VARCHAR(40)  NOT NULL,
    starts_at TIMESTAMP    NOT NULL,
    room      VARCHAR(20)
);

96. HR: вакансии по грейдам:

CREATE TABLE hr_vacancy (
    vacancy_id INTEGER PRIMARY KEY,
    title      VARCHAR(140) NOT NULL,
    grade      VARCHAR(20)  NOT NULL,
    opened_on  DATE         NOT NULL
);

97. E‑commerce: корзина покупателя:

CREATE TABLE cart_item (
    item_id     INTEGER PRIMARY KEY,
    customer_id INTEGER     NOT NULL,
    product_id  INTEGER     NOT NULL,
    qty         INTEGER     NOT NULL
);

98. Медицина: назначения лекарств на приёме:

CREATE TABLE med_rx (
    rx_id      INTEGER PRIMARY KEY,
    patient_id INTEGER      NOT NULL,
    drug_name  VARCHAR(120) NOT NULL,
    dosage     VARCHAR(60)  NOT NULL
);

99. Геоданные: точки интереса с координатами:

CREATE TABLE geo_poi (
    poi_id    INTEGER PRIMARY KEY,
    name      VARCHAR(160) NOT NULL,
    latitude  DECIMAL(9,6) NOT NULL,
    longitude DECIMAL(9,6) NOT NULL
);

Заключение

В этой статье на примере 100 «живых» сценариев показано применение create sql в операционных и аналитических задачах бизнеса.

В реальных проектах CREATE используется совместно с ALTER, DROP, TRUNCATE, а также DML‑командами (INSERT, UPDATE, DELETE).

Единый стиль кодирования и продуманные CONSTRAINT удобны для восприятия.

Понравились примеры? Сохраняйте страницу себе в закладки. Периодически планируем пополнять подборку новыми примерами.


 

Понравилась статья? Поделиться с друзьями: