46 | | PlayCounts = γ_{g.genre_id, g.name → genre_name, ar.name → artist_name, COUNT(*) → play_count} (σ_{c.customer_id = 123}((customer ⋈ invoice) ⋈ (invoice_line ⋈ track) ⋈ (track ⋈ genre) ⋈ (track ⋈ album) ⋈ (album ⋈ artist))) |
| 46 | !PlayCounts = γ_{g.genre_id, g.name → genre_name, ar.name → artist_name, COUNT(*) → play_count} (σ_{c.customer_id = 123}((customer ⋈ invoice) ⋈ (invoice_line ⋈ track) ⋈ (track ⋈ genre) ⋈ (track ⋈ album) ⋈ (album ⋈ artist))) |
| 47 | |
| 48 | |
| 49 | == 2. MaxPlayCounts == |
| 50 | Се пресметува максималниот број на плеј-стани за секој жанр. Операциите што се користат се: |
| 51 | |
| 52 | - **Grouping (γ)**: Групирање по `genre_id` и пресметување на максималниот број на плеј-стани за секој жанр користејќи ја функцијата `MAX`. |
| 53 | |
| 54 | Релационата алгебра за `MaxPlayCounts`: |
| 55 | |
| 56 | !MaxPlayCounts = γ_{genre_id, MAX(play_count) → max_count} (!PlayCounts) |
| 57 | |
| 58 | |
| 59 | == 3. Final_Result == |
| 60 | Се прави **Join** помеѓу `PlayCounts` и `MaxPlayCounts`, за да се изберат само оние редови каде што бројот на плеј-стани се совпаѓа со максималниот број за даден жанр. Се избираат само атрибутите `genre_name`, `artist_name`, и `play_count`. |
| 61 | |
| 62 | Релационата алгебра за финалниот резултат: |
| 63 | |
| 64 | Final_Result = π_{pc.genre_name, pc.artist_name, pc.play_count} |
| 65 | (PlayCounts ⋈_{pc.genre_id = mpc.genre_id ∧ pc.play_count = mpc.max_count} MaxPlayCounts) |
| 66 | |
| 67 | |
| 68 | == Целосен израз на релационата алгебра == |
| 69 | Со комбинирање на сите чекори, добиваме целосен израз за релационата алгебра: |
| 70 | |
| 71 | π_{pc.genre_name, pc.artist_name, pc.play_count} ((γ_{g.genre_id, g.name → genre_name, ar.name → artist_name, COUNT(*) → play_count}(σ_{c.customer_id = 123} ((customer ⋈ invoice) ⋈ (invoice_line ⋈ track) ⋈ (track ⋈ genre) ⋈ (track ⋈ album) ⋈ (album ⋈ artist)))) ⋈{pc.genre_id = mpc.genre_id ∧ pc.play_count = mpc.max_count} (γ{genre_id, MAX(play_count) → max_count} (PlayCounts))) |