Sobes.tech
Middle+

Мынадай дерекқор схемасы бар -- Тұтынушылар кестесі CREATE TABLE customers ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, city VARCHAR(255) NOT NULL ); -- Өнімдер кестесі CREATE TABLE products ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, category VARCHAR(100) ); -- Тапсырыс элементтері кестесі CREATE TABLE order_items ( order_id BIGINT NOT NULL, product_id BIGINT NOT NULL, qty DECIMAL(10, 3) NOT NULL CHECK (qty > 0), -- 10 таңба, 3 ондық бөлшек price NUMERIC(10, 2) NOT NULL CHECK (price >= 0), PRIMARY KEY (order_id, product_id) ); -- Тапсырыстар кестесі 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. Соңғы 30 күнде 2-ден астам тапсырыс жасаған пайдаланушылардың жалпы тапсырыс сомасы бойынша ТОП 10-ды көрсетіңіз 2. Соңғы 6 айда табыс бойынша ТОП 3 категорияны көрсетіңіз

sobes.tech AI

AI-дан жауап

  1. Соңғы 30 күн ішінде 2-ден астам тапсырыс жасаған ең көп 10 пайдаланушы:
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. Соңғы 6 ай ішінде ең көп табыс әкелген 3 категория:
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-лерді оқылымды әрі ыңғайлы ету үшін пайдаланады, тапсырыстарды күн бойынша сүзгілейді, содан кейін қажетті критерийлер бойынша деректерді агрегаттайды.