присоединение таблицы к самой себе, у которой нет ключа

#sql #join

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

Вопрос:

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

 Id-------Product---------date-------productID
1                a       2012             a1
1                a       2013             a1
1                b       2013             b1
2                a       2011             a1
2                c       2012             c1  
  

В нем почти 2 миллиона строк без первичного ключа.
Я хочу создать представление, в котором отображается количество продуктов, приобретенных каждым клиентом. Что мне делать? Спасибо, ребята!

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

1. @Gordon Linoff Спасибо, чувак! я опубликовал этот вопрос на своем планшете, сайт сильно отличается на планшете, и я не смог его отредактировать

2. Как вы идентифицируете клиента и заказ, можете ли вы добавить структуру вспомогательных таблиц к вашему вопросу?

3. Итак, каковы желаемые результаты для этого примера данных? Как вы думаете, почему для этого требуется самосоединение, а не простая группа by?

4. клиенты @swestfall идентифицируются по CustomerID, который показан в приведенной выше таблице как идентификатор, в реальной таблице есть несколько других столбцов, таких как период использования продукта клиентами и тому подобное. но на самом деле нет никаких поддерживающих таблиц. вот и все.

Ответ №1:

Я предполагаю, что id это относится к клиенту. В этом случае вам не нужен a join , вам нужен group by :

 select id, count(*) as numPurchases, count(distinct product) as numProducts
from table t
group by id;
  

Для представления вы просто добавляете create view t as

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

1. почему вы посчитали разные продукты? возможно, они купили один и тот же продукт дважды или более. проблема в том, что у меня нет OrderID в таблице

2. @RmanEdv . , , Утверждение: «показывает количество приобретенных продуктов» может означать количество отдельных продуктов или общее количество покупок. Я включил оба.