Как получить продукты и количество покупок у каждого из них с помощью одного SQL-запроса?

#sql

#sql

Вопрос:

Buy имеет внешний ключ product_id .

Итак, в дополнение к SELECT * FROM products; нам интересно получить количество покупок у каждого продукта.

Ответ №1:

Что-то вроде:

 SELECT p.*, COUNT(buy.product_id) FROM product p INNER JOIN buy ON buy.product_id = p.id GROUP BY buy.product_id
  

должно сработать.

Ответ №2:

Присоединиться

 SELECT Products.*, COUNT(Buy.ID) AS Bought
FROM products
    LEFT OUTER JOIN Buy ON products.ID = Buy.product_id
GROUP BY Buy.product_id
  

Подзапрос

 SELECT 
    Products.*, 
    (SELECT COUNT(ID) FROM Buy WHERE product_id = Products.ID) AS Bought
FROM products
  

Комментарии:

1. Спасибо! Побочный вопрос: есть идеи о производительности между этими двумя?

2. Как и любой хороший ответ DB, это зависит. Обычно объединение будет лучшим выбором. Я бы попробовал их оба и посмотрел на план выполнения.

Ответ №3:

 SELECT p.*,COUNT(b.product_id) FROM products p
INNER JOIN buy b ON p.id=b.product_id
GROUP BY b.product_id
  

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

Комментарии:

1. Спасибо randomguy. Я исправил вышесказанное. К сожалению, не удалось протестировать.