Sobes.tech
Middle+

Existuje schéma databáze, který zahrnuje: -- Tabulka zákazníků CREATE TABLE customers ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, city VARCHAR(255) NOT NULL ); -- Tabulka produktů CREATE TABLE products ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, category VARCHAR(100) ); -- Tabulka položek objednávek CREATE TABLE order_items ( order_id BIGINT NOT NULL, product_id BIGINT NOT NULL, qty DECIMAL(10, 3) NOT NULL CHECK (qty > 0), -- 10 číslic, 3 desetinná místa price NUMERIC(10, 2) NOT NULL CHECK (price >= 0), PRIMARY KEY (order_id, product_id) ); -- Tabulka objednávek CREATE TABLE orders ( id BIGSERIAL PRIMARY KEY, customer_id BIGINT, order_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, status VARCHAR(50) NOT NULL CHECK (status IN ('pending', 'paid', 'shipped', 'delivered', 'cancelled')) ); 1. Zobrazte TOP 10 podle součtu objednávek uživatelů, kteří za posledních 30 dní provedli více než 2 objednávky 2. Zobrazte 3 hlavní kategorie podle výnosů za posledních 6 měsíců

sobes.tech AI

Odpověď od AI

  1. ТОП 10 пользователей по сумме заказов, совершивших более 2 заказов за последние 30 дней:
WITH recent_orders AS (
    SELECT *
    FROM orders
    WHERE order_date >= NOW() - INTERVAL '30 days'
),
user_order_counts AS (
    SELECT customer_id, COUNT(*) AS order_count
    FROM recent_orders
    GROUP BY customer_id
    HAVING COUNT(*) > 2
),
user_order_sums AS (
    SELECT o.customer_id, SUM(oi.qty * oi.price) AS total_sum
    FROM recent_orders o
    JOIN order_items oi ON o.id = oi.order_id
    WHERE o.customer_id IN (SELECT customer_id FROM user_order_counts)
    GROUP BY o.customer_id
)
SELECT c.id, c.name, c.city, uos.total_sum
FROM user_order_sums uos
JOIN customers c ON c.id = uos.customer_id
ORDER BY uos.total_sum DESC
LIMIT 10;
  1. ТОП 3 категорий по выручке за последние 6 месяцев:
WITH recent_orders AS (
    SELECT id
    FROM orders
    WHERE order_date >= NOW() - INTERVAL '6 months'
),
category_revenue AS (
    SELECT p.category, SUM(oi.qty * oi.price) AS revenue
    FROM order_items oi
    JOIN recent_orders ro ON oi.order_id = ro.id
    JOIN products p ON oi.product_id = p.id
    GROUP BY p.category
)
SELECT category, revenue
FROM category_revenue
ORDER BY revenue DESC
LIMIT 3;

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