SQL, чтобы найти список магазинов в городе X, которые несут продукт Y и заказ по общему количеству заказов в asc - PullRequest
0 голосов
/ 12 декабря 2010

У меня есть эти таблицы:

Stores (id, name, city)
Products (id, name, price)
StoresProducts (id, store_id, product_id)
Orders (id, customer_id, product_id, store_id, order_date, status)

Какой будет SQL-оператор, чтобы придумать:

  • список магазинов в городе X
  • , которые несут продукт Y, и
  • перечислить магазины по общему количеству заказов в порядке заказа?

Ответы [ 3 ]

1 голос
/ 12 декабря 2010

Присоединение к магазину и продуктам, чтобы получить магазины, несущие товары в городе, - пример объединения.Подсчет заказов при группировке по магазинам и порядок по счетам - очень распространенная операция при написании отчетов.

Если вы делаете домашнюю работу, я оказал вам по крайней мере столько же помощи, сколько мог бы дать вам TA.Если это для работы, то вам стоит серьезно подумать о вашей текущей ситуации :-) Этот запрос должен занять не более минуты для всех, кто знает SQL для написания и тестирования, и я думаю, что вы бы узнали намного больше, если бы вы работали над ним.Основываясь на этих подсказках, вы получаете не более чем стандартный ответ, поэтому я стараюсь быть максимально полезным!

Наконец, почему вы отметили это как "sql server" и "mysql"?Это две очень разные реализации SQL.

0 голосов
/ 12 декабря 2010
select
 s.name, s.city, count(o.id) as numoforders
from
 stores s join
 storesproducts sp on sp.store_id = s.id join
 products p on p.id = sp.product_id join
 order o on o.store_id = o.store_id
where
 s.city = @city and p.id = @productid
group by
 s.name, s.city
order by
 3 desc
0 голосов
/ 12 декабря 2010

Попробуйте это.

SELECT Stores.name
  FROM Stores
       INNER JOIN StoresProducts
         ON Stores.id = StoresProduct.store_id
       INNER JOIN Products
         ON StoresProduct.product_id = Products.id
       INNER JOIN Orders
         ON Stores.id = Orders.id
 WHERE Stores.city = 'New York'
       AND Products.name = 'Shampoo'
 GROUP BY Stores.name
 ORDER BY COUNT(*); 

Вы просто запрашиваете «общее количество заказов», а не «общее количество заказов продукта Y». Если вам это нужно, добавьте дополнительный предикат к объединению при заказе.

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