Changes between Version 4 and Version 5 of AdvancedReports


Ignore:
Timestamp:
09/22/26 02:03:04 (8 days ago)
Author:
201165
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v4 v5  
    103103)
    104104}}}
    105 == Извештај 3: Целосно растителни рецепти
    106 
    107 === Опис на барањата за податоци
    108 === SQL - приказ
    109 === Релациона алгебра - приказ
    110 
    111 == Извештај 4: Ден со најголем внес по корисник
    112 
    113 === Опис на барањата за податоци
    114 === SQL - приказ
    115 === Релациона алгебра - приказ
    116 
     105== Извештај 3: Ден со најголем внес по корисник
     106// Callorie-maxing view //
     107=== Опис на барањата за податоци
     108Фокус на денот со најмногу калории на секој корисник наспроти неговиот сопствен просек. секој корисник што води дневник на исхрана, извештајот го наоѓа денот во кој внел најмногу енергија. Тој ден го споредува со просечниот дневен внес на истиот корисник.
     109* RANK() ги дели деновите по корисник и ги подредува по енергија
     110* AVG() врз истата партиција го дава просекот.
     111//ROW_NUMBER() прикажуваше само една инстанца ако имаше дупликати/денови со ист број калории//
     112=== SQL - приказ
     113{{{
     114WITH daily_intake AS (
     115    SELECT u.username,
     116           ip.date_time::date AS intake_day,
     117           SUM(ip.kcal)       AS kcal_consumed,
     118           COUNT(*)           AS meals_logged,
     119           ROUND(AVG(SUM(ip.kcal)) OVER (PARTITION BY u.id)) AS avg_daily_kcal,
     120           RANK() OVER (PARTITION BY u.id ORDER BY SUM(ip.kcal) DESC) AS day_rank
     121    FROM "user" u
     122    JOIN intake_planner ip ON ip.user_id = u.id
     123    WHERE ip.is_consumed = TRUE
     124    GROUP BY u.id, u.username, ip.date_time::date
     125)
     126SELECT username, intake_day, kcal_consumed, meals_logged, avg_daily_kcal
     127FROM daily_intake
     128WHERE day_rank = 1
     129ORDER BY kcal_consumed DESC;
     130}}}
     131=== Релациона алгебра - приказ
     132{{{
     133Daily ← γ_{u.id, u.username, date(ip.date_time) → intake_day;
     134          SUM(ip.kcal) → kcal_consumed, COUNT(*) → meals_logged} (
     135    σ_{ip.is_consumed = TRUE} (User ⋈_{u.id = ip.user_id} Intake_Planner)
     136)
     137
     138τ_{kcal_consumed DESC} (
     139  π_{username, intake_day, kcal_consumed, meals_logged, avg_daily_kcal} (
     140    σ_{day_rank = 1} (
     141      ω_{PARTITION BY u.id;
     142         RANK() ORDER BY kcal_consumed DESC → day_rank,
     143         AVG(kcal_consumed)                 → avg_daily_kcal} (Daily)
     144    )
     145  )
     146)
     147}}}
     148== Извештај 4: Целосно растителни рецепти
     149//Go Green Filter//
     150=== Опис на барањата за податоци
     151Рецепти чија секоја состојка е од растителна категорија, проверени наспроти веганската ознака. пронаоѓа рецептите во кои секоја состојка е од растително потекло. Тоа е релациско делење: рецептот се квалификува само ако бројот на неговите растителни состојки е еднаков на бројот на сите негови состојки. Една состојка од животинско потекло го дисквалификува целиот рецепт. Растителни се типовите:
     152* vegetable
     153* fruit
     154* legume
     155* nut
     156* seed
     157* oil
     158* herb
     159* spice
     160* carb
     161* beverage
     162* //Медот и јајцето// се од типот **other** -> дисквалификуваат
     163=== SQL - приказ
     164{{{
     165SELECT r.name                          AS recipe,
     166       u.username                      AS author,
     167       COUNT(*)                        AS ingredient_count,
     168       ROUND(r.kcal_sum / r.servings)  AS kcal_per_portion,
     169       EXISTS (SELECT 1
     170               FROM recipe_contains_restriction rcr
     171               JOIN restriction res ON res.id = rcr.restriction_id
     172               WHERE rcr.recipe_id = r.id
     173                 AND res.type = 'vegan')  AS tagged_vegan
     174FROM recipe r
     175JOIN "user" u                        ON u.id = r.user_id
     176JOIN recipe_contains_ingredient rci  ON rci.recipe_id = r.id
     177JOIN ingredient i                    ON i.id = rci.ingredient_id
     178WHERE i.type IN ('vegetable', 'fruit', 'legume', 'nut', 'seed',
     179                 'oil', 'herb', 'spice', 'carb', 'beverage')
     180GROUP BY r.id, r.name, u.username, r.kcal_sum, r.servings
     181HAVING COUNT(*) = (SELECT COUNT(*)
     182                   FROM recipe_contains_ingredient rci2
     183                   WHERE rci2.recipe_id = r.id)
     184ORDER BY kcal_per_portion;
     185}}}
     186=== Релациона алгебра - приказ
     187{{{
     188Plant ← {'vegetable', 'fruit', 'legume', 'nut', 'seed',
     189          'oil', 'herb', 'spice', 'carb', 'beverage'}
     190
     191AnimalUse ← π_{rci.recipe_id} (
     192    σ_{i.type ∉ Plant} (
     193        Recipe_Contains_Ingredient ⋈_{rci.ingredient_id = i.id} Ingredient
     194    )
     195)
     196
     197PlantOnly ← π_{rci.recipe_id} (Recipe_Contains_Ingredient) − AnimalUse
     198
     199τ_{kcal_per_portion} (
     200  γ_{r.id, r.name, u.username; COUNT(*) → ingredient_count} (
     201    (PlantOnly ⋈_{recipe_id = r.id} Recipe)
     202      ⋈_{r.user_id = u.id} User
     203      ⋈_{r.id = rci.recipe_id} Recipe_Contains_Ingredient
     204  )
     205)
     206}}}
    117207
    118208== Навигација низ проектот