Как написать MySQL запрос

Рейтинг: -4Ответов: 1Опубликовано: 12.03.2023

Мне нужно сделать так как было до этого то есть

    WITH purchase_count AS (
    SELECT p.publisher_id, c.category_id, COUNT(*) AS PurchaseCount
    FROM purchase_data pur
    JOIN product g ON g.product_id = pur.product_id
    JOIN publisher p ON p.publisher_id = g.publisher_id
    JOIN category c ON c.category_id = g.category_id
    GROUP BY p.publisher_id, c.category_id
),
ranked_categories AS (
    SELECT publisher_id, category_id, PurchaseCount,
           RANK() OVER (PARTITION BY publisher_id ORDER BY PurchaseCount DESC) AS CategoryRank
    FROM purchase_count
)
SELECT r.publisher_id, p.publisher_name,
       r.category_id, c.category_name,
       r.PurchaseCount
FROM ranked_categories r
JOIN publisher p ON p.publisher_id = r.publisher_id
JOIN category c ON c.category_id = r.category_id
WHERE r.CategoryRank <= 3;

Ответы

▲ 0

Извините за предыдущий ответ. Я хотел бы представить более развёрнутый ответ, как некоторые просили в комментариях. К сожалению, структура вашей базы данных не соответствует требованиям поставленной задачи. Я попытался составить запрос для вашей структуры, но безуспешно.

P.S. В будущем я рекомендую использовать команду SHOW FIELDS FROM таблица для того чтобы поделиться с нами структурой вашей базы данных.

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

CREATE TABLE Publishers (
  PublisherID INT PRIMARY KEY,
  PublisherName VARCHAR(50)
);

CREATE TABLE Categories (
  CategoryID INT PRIMARY KEY,
  CategoryName VARCHAR(50)
);

CREATE TABLE Games (
  GameID INT PRIMARY KEY,
  GameName VARCHAR(50),
  PublisherID INT,
  CategoryID INT,
  ReleaseDate DATE,
  FOREIGN KEY (PublisherID) REFERENCES Publishers(PublisherID),
  FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)
);

CREATE TABLE Purchases (
  PurchaseID INT PRIMARY KEY,
  GameID INT,
  PurchaseDate DATE,
  PurchasePrice DECIMAL(10,2),
  FOREIGN KEY (GameID) REFERENCES Games(GameID)
);

С такой структурой таблиц, запрос для вывода 3-x самых продаваемых категорий для каждого издателя будет таким:

WITH purchase_count AS (
    SELECT p.PublisherID, c.CategoryID, COUNT(*) AS PurchaseCount
    FROM Purchases pur
    JOIN Games g ON g.GameID = pur.GameID
    JOIN Publishers p ON p.PublisherID = g.PublisherID
    JOIN Categories c ON c.CategoryID = g.CategoryID
    GROUP BY p.PublisherID, c.CategoryID
),
ranked_categories AS (
    SELECT PublisherID, CategoryID, PurchaseCount,
           RANK() OVER (PARTITION BY PublisherID ORDER BY PurchaseCount DESC) AS CategoryRank
    FROM purchase_count
)
SELECT r.PublisherID, p.PublisherName,
       r.CategoryID, c.CategoryName,
       r.PurchaseCount
FROM ranked_categories r
JOIN Publishers p ON p.PublisherID = r.PublisherID
JOIN Categories c ON c.CategoryID = r.CategoryID
WHERE r.CategoryRank <= 3;