sql count () получить неправильный результат - PullRequest
0 голосов
/ 01 июля 2019

У меня есть таблица, подобная этой структуре:

|  event id  | item 1 id | item 2 id |   set   |
|     1      |     1     |     2     |    1    |
|     1      |     1     |     3     |    1    |
|     1      |     2     |     1     |    1    |
|     1      |     2     |     3     |    1    |
|     1      |     3     |     1     |    1    |
|     1      |     3     |     2     |    1    |
|     1      |     2     |     4     |    2    |
|     1      |     4     |     2     |    2    |
|     2      |     1     |     4     |    3    |
|     2      |     1     |     5     |    3    |
|     2      |     4     |     1     |    3    |
|     2      |     4     |     5     |    3    |
|     2      |     5     |     1     |    3    |
|     2      |     5     |     4     |    3    |

теперь я хочу посчитать вхождение item1, а также item1 в сочетании с item2 отдельно

Я попробовал следующее:

with count_item1 AS (
    select event_id, item_1_id, count(distinct set) AS c1 from table
    group by event_id, item_1_id
), count_item1_and_item2 AS (
    select event_id, item_1_id, item_2_id, count(distinct set) AS c2 from table
    group by event_id, item_1_id, item_2_id
)
select t1.event_id, t1.item_1_id, t1.item_2_id, t1.c2, t2.c1
from count_item1_and_item2 AS t1
inner join count_item1 AS t2
on t1.event_id=t2.event_id and t1.item_1_id=t2.item_1_id

например как таблица выше поэтому результат для этого должен быть:

|  event id  | item 1 id | item 2 id |   c1   |   c2   |
|      1     |     1     |     2     |    1   |    1   |
|      1     |     1     |     3     |    1   |    1   |
|      1     |     2     |     1     |    2   |    1   |
|      1     |     2     |     3     |    2   |    1   |
|      1     |     3     |     1     |    1   |    1   |
|      1     |     3     |     2     |    1   |    1   |
|      1     |     2     |     4     |    2   |    1   |
|      1     |     4     |     2     |    1   |    1   |
|      2     |     1     |     4     |    1   |    1   |
|      2     |     1     |     5     |    1   |    1   |
|      2     |     4     |     1     |    1   |    1   |
|      2     |     4     |     5     |    1   |    1   |
|      2     |     5     |     1     |    1   |    1   |
|      2     |     5     |     4     |    1   |    1   |

значение каждой строки: в event_id, элемент 1 появился в отдельном наборе c1, а (item1, item2) появился в отдельном наборе c2. также количество (item1, item2) равно (item2, item1)

тогда я нахожу странную вещь: появление самого item1 должно быть не меньше, чем возникновение item1 в сочетании с item2, но я считаю, что иногда item1 в сочетании с item2 имеет большее количество, чем count item1, я что-то здесь не так сделал? Я думаю, что моя идея верна, но я не получил результат. Меня здесь собрали на выходные.

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