У меня есть следующая таблица под названием genkeyword:
---------------------------------------------------------------------------
| id | title | genre | keyword | year |
----------------------------------------------------------------------------
| 315 | Harry Potter | drama | magic | 2011 |
| 315 | Harry Potter | mystery | magic | 2011 |
| 315 | Harry Potter | adventure | magic | 2011 |
| 315 | Harry Potter | fantasy | magic | 2011 |
| 315 | Harry Potter | drama | witch | 2011 |
| 315 | Harry Potter | mystery | witch | 2011 |
| 315 | Harry Potter | adventure | witch | 2011 |
| 315 | Harry Potter | fantasy | witch | 2011 |
| 407 | Cinderella | fantasy | prince | 2015 |
| 407 | Cinderella | drama | prince | 2015 |
| 407 | Cinderella | fantasy | prince | 2015 |
| 407 | Cinderella | drama | prince | 2015 |
| 826 | The Shape of Water | horror | scientist | 2017 |
| 826 | The Shape of Water | adventure | scientist | 2017 |
| 826 | The Shape of Water | thriller | scientist | 2017 |
| 826 | The Shape of Water | drama | scientist | 2017 |
| 826 | The Shape of Water | horror | friendship | 2017 |
| 826 | The Shape of Water | adventure | friendship | 2017 |
| 826 | The Shape of Water | thriller | friendship | 2017 |
| 826 | The Shape of Water | drama | friendship | 2017 |
---------------------------------------------------------------------------
У меня есть следующий запрос, который определяет частоту всех жанров, которые каждый фильм в приведенной выше таблице имеет с Гарри Поттером:
select title, year, count(distinct genre) as genre_freq from genkeyword
where genre in (select genre from genkeyword where title='Harry Potter') and
title <> 'Harry Potter' group by
title, year order by genre_freq desc;
Вывод должен быть:
--------------------------------------------------
| title | year | genre_freq |
---------------------------------------------------
| Cinderella | 2015 | 2 |
| The Shape of Water | 2017 | 2 |
----------------------------------------------------
У меня проблемы с пониманием, как именно работает счет (отдельный жанр) в запросе. Я знаю, что SELECT DISTINCT возвращает только отдельные значения и удаляет дубликаты записей из результатов. Я не уверен, когда счет (отличный жанр) фактически удаляет дубликаты записей. Мне бы очень хотелось понять, что делает запрос за кулисами.
Что я знаю до сих пор:
Для каждого кортежа в genkeyword:
- «Где жанр в (выберите жанр из genkeyword, где title = 'Harry Potter')» », извлекает все строки, в которых значение атрибута жанра является жанром в Harry Potter.
- Если жанр в рассматриваемом кортеже находится в наборе результатов, возвращаемом предложением where, то он считается по количеству (отличный жанр). Также значение фильма в рассматриваемом кортеже не может быть Гарри Поттером, иначе оно не будет засчитано.
Однако, когда счетчик (отдельный жанр) фактически удаляет дубликаты? Любые идеи приветствуются.