Changes between Version 7 and Version 8 of AdvancedReports


Ignore:
Timestamp:
09/24/25 01:49:59 (3 weeks ago)
Author:
223270
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v7 v8  
    44Идентификување на дестинации кои имаат најголем број на различни видови настани. Во долунаведениот код се пребаруваат сите дестинации и ги брои различните видови на настани (како концерти, фестивали, саеми и сл.) поврзани со секоја дестинација. Потоа, резултатите се сортираат по бројот на различни настани во опаѓачки редослед и се добива еден вид на рангирање. Од особено значење за корисници што сакаат да вклучат повеќе разновидни настани при нивното патување.
    55{{{
    6 SELECT d.imeLokacija AS destinacija, COUNT(DISTINCT n.naziv) AS broj_nastani
    7 FROM DESTINACII d
    8 JOIN NASTANI n ON d.idDest = n.idDest
    9 GROUP BY d.imeLokacija
    10 HAVING COUNT(DISTINCT n.naziv) = (
    11     SELECT MAX(broj_nastani)
     6SELECT d.location_name AS destination, COUNT(DISTINCT e.event_type) AS event_number
     7FROM travel_sage.destination d
     8JOIN travel_sage.event e ON d.id_destination = e.id_destination
     9GROUP BY d.location_name
     10HAVING COUNT(DISTINCT e.event_type) = (
     11    SELECT MAX(event_number)
    1212    FROM (
    13         SELECT COUNT(DISTINCT n.naziv) AS broj_nastani
    14         FROM DESTINACII d
    15         JOIN NASTANI n ON d.idDest = n.idDest
    16         GROUP BY d.imeLokacija
     13        SELECT COUNT(DISTINCT e.event_type) AS event_number
     14        FROM travel_sage.destination d
     15        JOIN travel_sage.event e ON d.id_destination = e.id_destination
     16        GROUP BY d.location_name
    1717    ) AS temp
    1818);
     
    2323Дополнително, за да се прикажат различни категории на настани за одредена дестинација. За пример, доколку сакате да ги видите сите видови настани што се одржуваат во Охрид:
    2424{{{
    25 SELECT DISTINCT n.naziv
    26 FROM NASTANI n
    27 JOIN DESTINACII d ON n.idDest = d.idDest
    28 WHERE d.imeLokacija = 'Охрид';
     25SELECT DISTINCT e.event_type
     26FROM travel_sage.event e
     27JOIN travel_sage.destination d ON e.id_destination = d.id_destination
     28WHERE d.location_name = 'Охрид';
    2929}}}
    3030
    3131
    32 === Топ 10 дестинации според рецензии (атрибут kvalitet)
     32=== Топ дестинации според просечен квалитет на рецензии
    3333Овде се зема просечниот квалитет на рецензиите за секоја дестинација и ги прикажува првите 10 дестинации со највисок квалитет на рецензии. Корисно за корисниците што сакаат да ја изберат најдобро оценетата дестинација.
    3434{{{
    35 SELECT d.imeLokacija, AVG(r.kvalitet) AS prosekKvalitet
    36 FROM DESTINACII d
    37 JOIN RECENZII r ON d.idDest = r.idDest
    38 GROUP BY d.imeLokacija
    39 ORDER BY prosekKvalitet DESC
     35SELECT d.location_name, AVG(r.quality) AS average_quality
     36FROM travel_sage.destination d
     37JOIN travel_sage.review r ON d.id_destination = r.id_destination
     38GROUP BY d.location_name
     39ORDER BY average_quality DESC
    4040LIMIT 10;
    4141}}}
    4242
    4343
    44 === Дестинации со најголем број на активности под различни цени т.е. опсези
     44=== Дестинации со најголем број на активности под различни ценовни опсези
    4545Приказ на дестинациите и брои колку активности постојат во различни ценовни групи (пример под 20, под 50, под 100 евра). Тоа му помага на корисникот да избере дестинација според неговиот буџет и преференции за активности.
    4646{{{
    47 SELECT d.imeLokacija,
    48        SUM(CASE WHEN a.iznos < 20 THEN 1 ELSE 0 END) AS aktivnostiPod20,
    49        SUM(CASE WHEN a.iznos < 50 THEN 1 ELSE 0 END) AS aktivnostiPod50,
    50        SUM(CASE WHEN a.iznos < 100 THEN 1 ELSE 0 END) AS aktivnostiPod100
    51 FROM DESTINACII d
    52 JOIN AKTIVNOSTI a ON d.idDest = a.idDest
    53 GROUP BY d.imeLokacija
    54 ORDER BY aktivnostiPod20 DESC, aktivnostiPod50 DESC, aktivnostiPod100 DESC;
     47SELECT d.location_name,
     48       SUM(CASE WHEN a.amount < 20 THEN 1 ELSE 0 END) AS activities_under20,
     49       SUM(CASE WHEN a.amount < 50 THEN 1 ELSE 0 END) AS activities_under50,
     50       SUM(CASE WHEN a.amount < 100 THEN 1 ELSE 0 END) AS activities_under100
     51FROM travel_sage.destination d
     52JOIN travel_sage.activity a ON d.id_destination = a.id_destination
     53GROUP BY d.location_name
     54ORDER BY activities_under20 DESC, activities_under50 DESC, activities_under100 DESC;
    5555}}}
    5656
     
    5959Се прикажуваат дестинации со евтини активности.
    6060{{{
    61 SELECT d.imeLokacija,
    62        COUNT(a.idAktivnost) AS vkupnoAktivnosti,
    63        SUM(CASE WHEN a.iznos < 20 THEN 1 ELSE 0 END) AS efiniAktivnosti,
    64        (SUM(CASE WHEN a.iznos < 20 THEN 1 ELSE 0 END) * 100.0 / COUNT(a.idAktivnost)) AS procentEfiniAktivnosti
    65 FROM DESTINACII d
    66 JOIN AKTIVNOSTI a ON d.idDest = a.idDest
    67 GROUP BY d.imeLokacija
    68 HAVING COUNT(a.idAktivnost) > 0
    69 ORDER BY procentEfiniAktivnosti DESC;
     61SELECT d.location_name,
     62       COUNT(a.id_activity) AS vkupno_aktivnosti,
     63       SUM(CASE WHEN a.amount < 20 THEN 1 ELSE 0 END) AS efini_aktivnosti,
     64       (SUM(CASE WHEN a.amount < 20 THEN 1 ELSE 0 END) * 100.0 / COUNT(a.id_activity)) AS procent_efini_aktivnosti
     65FROM travel_sage.destination d
     66JOIN travel_sage.activity a ON d.id_destination = a.id_destination
     67GROUP BY d.location_name
     68HAVING COUNT(a.id_activity) > 0
     69ORDER BY procent_efini_aktivnosti DESC;
    7070}}}
    7171
     
    7474Најактивни корисници т.е. оние кои имаат напишано најголем број на рецензии.
    7575{{{
    76 SELECT idKorisnik, COUNT(*) AS broj_recenzii
    77 FROM RECENZII
    78 GROUP BY idKorisnik
    79 HAVING COUNT(*) > (SELECT COUNT(*) * 0.9 FROM RECENZII);
     76SELECT u.id_user, COUNT(r.id_review) AS broj_recenzii
     77FROM travel_sage.users u
     78JOIN travel_sage.review r ON u.id_user = r.id_user
     79GROUP BY u.id_user
     80ORDER BY broj_recenzii DESC
     81LIMIT 10;
    8082}}}
    8183
     
    8486Пресметување на цената по ден за пакети, што помага да се дознае кој пакет има најдобра вредност според сумата. Во случај да има пакет од 20 евра за 1 ден или пакет од 50 евра за 1 недела, би можело да се прикаже која опција е најисплатлива.
    8587{{{
    86 SELECT p.imePaket AS paket,
    87        p.cena / DATEDIFF(p.kraj, p.pochetok) AS cena_po_den
    88 FROM PAKETI p
    89 WHERE p.cena / DATEDIFF(p.kraj, p.pochetok) = (
    90     SELECT MIN(p.cena / DATEDIFF(p.kraj, p.pochetok))
    91     FROM PAKETI p
    92 );
     88SELECT p.package_name, (p.price / GREATEST(DATE_PART('day', p.end_date - p.start_date), 1)) AS cena_po_den
     89FROM travel_sage.package p
     90ORDER BY cena_po_den ASC
     91LIMIT 1;
    9392}}}
    9493
     
    9796Помага да се следи трендот на резервации преку времето.
    9897{{{
    99 SELECT MONTH(vremenskaTochka) AS mesec, COUNT(idRezervacija) AS broj_rezervacii
    100 FROM REZERVACII
    101 GROUP BY MONTH(vremenskaTochka)
     98SELECT DATE_TRUNC('month', r.time_point) AS mesec, COUNT(r.id_reservation) AS broj_rezervacii
     99FROM travel_sage.reservation r
     100GROUP BY mesec
    102101ORDER BY mesec;
    103102}}}
     
    107106Покажување на новорегистрираните корисници по месец. Овозможува да се види растот на бројот на корисници во различни месеци.
    108107{{{
    109 SELECT MONTH(datumRagjanje) AS mesec, COUNT(idKorisnik) AS broj_novi_korisnici
    110 FROM KORISNICI
    111 GROUP BY MONTH(datumRagjanje)
     108SELECT DATE_TRUNC('month', u.birth_date) AS mesec, COUNT(u.id_user) AS broj_novi_korisnici
     109FROM travel_sage.users u
     110GROUP BY mesec
    112111ORDER BY mesec;
    113112}}}
     
    117116Ги брои пакетите што се резервирани по месец. Можност за следење на популарноста на различни пакети во текот на годината.
    118117{{{
    119 SELECT MONTH(p.pochetok) AS mesec, COUNT(p.idPaket) AS broj_paketi
    120 FROM PAKETI p
    121 JOIN REZERVACII r ON p.idRezervacija = r.idRezervacija
    122 GROUP BY MONTH(p.pochetok)
     118SELECT DATE_TRUNC('month', p.start_date) AS mesec, COUNT(pr.id_package) AS broj_paketi
     119FROM travel_sage.package p
     120JOIN travel_sage.package_reservation pr ON p.id_package = pr.id_package
     121GROUP BY mesec
    123122ORDER BY mesec;
    124123}}}
     
    128127Корисно е за да се согледа колку настани се организирани секој месец.
    129128{{{
    130 SELECT MONTH(pochetenDatum) AS mesec, COUNT(idNastan) AS broj_nastani
    131 FROM NASTANI
    132 GROUP BY MONTH(pochetenDatum)
     129SELECT DATE_TRUNC('month', e.start_date) AS mesec, COUNT(e.id_event) AS broj_nastani
     130FROM travel_sage.event e
     131GROUP BY mesec
    133132ORDER BY mesec;
    134133}}}
     
    138137Овде е прикажана бројката на активности по категорија, со цел да се утврди која активност е најпопуларна во текот на месецот.
    139138{{{
    140 SELECT MONTH(r.vremenskaTochka) AS mesec, a.kategorija, COUNT(a.idAktivnost) AS broj_aktivnosti
    141 FROM REZERVACII r
    142 JOIN AKTIVNOSTI a ON r.idAktivnost = a.idAktivnost
    143 GROUP BY MONTH(r.vremenskaTochka), a.kategorija
     139SELECT DATE_TRUNC('month', r.time_point) AS mesec, a.category, COUNT(a.id_activity) AS broj_aktivnosti
     140FROM travel_sage.reservation r
     141JOIN travel_sage.activity_reservation ar ON r.id_reservation = ar.id_reservation
     142JOIN travel_sage.activity a ON ar.id_activity = a.id_activity
     143GROUP BY mesec, a.category
    144144ORDER BY mesec, broj_aktivnosti DESC;
    145145}}}
     
    149149Статистика за секој корисник по месец, вклучувајќи број на резервации и активности. Така, се гледа активноста на корисниците и популарноста на нивните активности.
    150150{{{
    151 SELECT MONTH(r.vremenskaTochka) AS mesec, k.ime, k.prezime, COUNT(r.idRezervacija) AS broj_rezervacii, COUNT(a.idAktivnost) AS broj_aktivnosti
    152 FROM KORISNICI k
    153 JOIN REZERVACII r ON k.idKorisnik = r.idKorisnik
    154 JOIN AKTIVNOSTI a ON r.idAktivnost = a.idAktivnost
    155 GROUP BY MONTH(r.vremenskaTochka), k.idKorisnik
     151SELECT DATE_TRUNC('month', r.time_point) AS mesec, u.first_name, u.last_name,
     152       COUNT(DISTINCT r.id_reservation) AS broj_rezervacii,
     153       COUNT(DISTINCT ar.id_activity) AS broj_aktivnosti
     154FROM travel_sage.users u
     155JOIN travel_sage.reservation r ON u.id_user = r.id_user
     156LEFT JOIN travel_sage.activity_reservation ar ON r.id_reservation = ar.id_reservation
     157GROUP BY mesec, u.id_user
    156158ORDER BY mesec, broj_rezervacii DESC;
    157159}}}
    158160
    159161
     162=== Просечен попуст на премиум корисници
     163{{{
     164SELECT AVG(pu.discount) AS prosek_popust
     165FROM premium pu;
     166}}}
    160167
     168
     169