Функция определения наиболее прибыльного магазина из базы данных - PullRequest
0 голосов
/ 24 апреля 2019

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

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

    SELECT name, (SUM(price * quantity)) AS TotalPrice
    FROM Items NATURAL JOIN Inventory
    GROUP BY name
    ORDER BY (TotalPrice) DESC;

Схема:
Инвентарь (имя: строка, элемент: строка, количество: целое число)
Элементы (элемент: строка, бренд: строка, цена: двойной)
Ошибка: используется оператор выбора имеетразное количество столбцов.

Я смогу вернуть n-й самый прибыльный магазин.У команды MySQL есть функции для создания представления по порядку, но я не знаю, как вернуть индекс упорядоченной таблицы.Это не домашняя работа, просто обзор для экзамена.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Мне удалось создать процедуру, но не функцию, которая дает мне желаемый результат со следующим кодом:

DELIMITER |
CREATE PROCEDURE m2(IN N INTEGER)
BEGIN
SELECT name, (SUM(price * quantity)) AS Total_Profit
FROM Items JOIN
Inventory
USING (item)
GROUP BY name
ORDER BY Total_Profit DESC
LIMIT N, 1;
END |
0 голосов
/ 24 апреля 2019

Вы можете получить n-й элемент в списке, используя OFFSET и LIMIT:

SELECT name, (SUM(price * quantity)) AS TotalPrice
FROM Items JOIN
     Inventory
     USING (item)
GROUP BY name
ORDER BY TotalPrice DESC
OFFSET <n - 1> LIMIT 1

Итак, для 3-го пункта это будет:

OFFSET 2 LIMIT 1

Обратите внимание, что я удалил NATURAL JOIN. Я рекомендую никогда не использовать NATURAL JOIN s, потому что код не показывает ключи JOIN (и поэтому подвержен ошибкам) ​​и потому что они не учитывают должным образом объявленные отношения внешнего ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...