Сравнение 2-го по величине элемента в группе с самым большим элементом в группе с использованием SQL - PullRequest
0 голосов
/ 25 июня 2018

У меня есть реляционная база данных для приложения Burger Building, которое использует ресторан.Две таблицы, содержащиеся в БД: Category и Item.Они используются для отображения категорий, а затем клиент может выбрать категорию (EG Buns), просмотреть всех детей, содержащихся в этой категории, и выбрать, каких из них добавить в свой заказ.Две таблицы связаны с помощью поля с именем CategoryID.

База данных элементов содержит среди многих следующие поля: ItemID, ItemName, TimesOrdered, CategoryID.

Одной из необходимых функций является просмотр товара, который был заказан наиболее (самый популярный) в каждой категории.Это можно получить из поля TimesOrdered.Однако, если два предмета были заказаны одинаковое количество раз, то технически нет ни одного предмета в этой категории, который был бы заказан чаще всего.

Поэтому, самое большое поле TimesOrdered нужно будет сравнитьво второе по величине поле TimesOrdered, чтобы определить, было ли заказано больше всего товаров для этой категории.

Есть ли способ добиться этого с помощью SQL?Например, показ ItemID для каждой категории (с использованием группировки по CategoryID), который был заказан чаще всего, если заказанный товар второй по величине заказан меньше раз, чем товар, который был заказан чаще всего.

Я знаю, что это, очевидно, можно сделать, просто просмотрев первые два элемента и сравнив поле TimesOrdered второй записи с полем TimesOrdered первой записи, но это вызов и способ улучшить мой SQLЕсть ли какой-либо способ получить желаемые результаты с помощью одного оператора SQL?

Заранее спасибо за любые ответы :)

Item table sample data

enter image description here

enter image description here

1 Ответ

0 голосов
/ 25 июня 2018

Можно ли поделиться некоторыми примерами данных? Например, какие типы записей находятся в вашей таблице Item?

Насколько конкретно ваша таблица Item связана с вашей таблицей Category? У вас есть несколько предметов в категории?

Я также хотел бы знать, как обновляется поле TimesOrdered. Это что-то, что обновляется пользователем вручную всякий раз, когда этот элемент заказывается или обрабатывается кодом?

Относительно вывода: Звучит так, как будто вы хотите отобразить по категории элемент с наибольшим количеством заказов. Это правильно? Если так, будет ли это отображаться через запрос, который запускает пользователь? Звучит так, как будто вы хотите отобразить что-то другое для категорий с несколькими элементами, имеющими «максимальное количество элементов» для этой категории. Если в данной категории есть несколько элементов с максимальным ItemCount, что должно отображаться для этой категории? Не могли бы вы привести пример того, что вы ожидаете увидеть?

Я думаю, что лучший способ справиться с этим - использовать несколько подзапросов, которые в Access могут быть довольно сложными. Возможно, лучше разбить это на отдельные запросы в Access, которые вы можете постепенно выбирать из

  1. Создайте запрос Q1, который показывает максимум TimesOrdered для каждой категории.
  2. Создайте запрос Q2, который использует Q1, чтобы выяснить, сколько элементов для каждой категории имеют максимальное значение TimesOrdered.
  3. В зависимости от того, как вы хотите отобразить окончательные результаты, вы можете создать новый запрос Q3, который либо показывает NULL для элемента в этой категории (если есть связь), либо для соответствующего элемента. По сути, вы будете отображать элемент из каждой категории, где TimesOrdered соответствует максимальному TimesOrdered для этой категории (возможно, придется выполнять специальную обработку для категорий со связями).

Еще одна вещь, о которой вы могли бы подумать: как насчет отдельной таблицы Orders, в которой хранятся детали каждого заказа, а не поля TimesOrdered? Конечно, это еще больше усложнит ваши запросы, но даст вам больше данных для отчета.

...