Changes between Version 7 and Version 8 of AdvancedReports
- Timestamp:
- 09/24/25 01:49:59 (3 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AdvancedReports
v7 v8 4 4 Идентификување на дестинации кои имаат најголем број на различни видови настани. Во долунаведениот код се пребаруваат сите дестинации и ги брои различните видови на настани (како концерти, фестивали, саеми и сл.) поврзани со секоја дестинација. Потоа, резултатите се сортираат по бројот на различни настани во опаѓачки редослед и се добива еден вид на рангирање. Од особено значење за корисници што сакаат да вклучат повеќе разновидни настани при нивното патување. 5 5 {{{ 6 SELECT d. imeLokacija AS destinacija, COUNT(DISTINCT n.naziv) AS broj_nastani7 FROM DESTINACIId8 JOIN NASTANI n ON d.idDest = n.idDest9 GROUP BY d. imeLokacija10 HAVING COUNT(DISTINCT n.naziv) = (11 SELECT MAX( broj_nastani)6 SELECT d.location_name AS destination, COUNT(DISTINCT e.event_type) AS event_number 7 FROM travel_sage.destination d 8 JOIN travel_sage.event e ON d.id_destination = e.id_destination 9 GROUP BY d.location_name 10 HAVING COUNT(DISTINCT e.event_type) = ( 11 SELECT MAX(event_number) 12 12 FROM ( 13 SELECT COUNT(DISTINCT n.naziv) AS broj_nastani14 FROM DESTINACIId15 JOIN NASTANI n ON d.idDest = n.idDest16 GROUP BY d. imeLokacija13 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 17 17 ) AS temp 18 18 ); … … 23 23 Дополнително, за да се прикажат различни категории на настани за одредена дестинација. За пример, доколку сакате да ги видите сите видови настани што се одржуваат во Охрид: 24 24 {{{ 25 SELECT DISTINCT n.naziv26 FROM NASTANI n27 JOIN DESTINACII d ON n.idDest = d.idDest28 WHERE d. imeLokacija= 'Охрид';25 SELECT DISTINCT e.event_type 26 FROM travel_sage.event e 27 JOIN travel_sage.destination d ON e.id_destination = d.id_destination 28 WHERE d.location_name = 'Охрид'; 29 29 }}} 30 30 31 31 32 === Топ 10 дестинации според рецензии (атрибут kvalitet)32 === Топ дестинации според просечен квалитет на рецензии 33 33 Овде се зема просечниот квалитет на рецензиите за секоја дестинација и ги прикажува првите 10 дестинации со највисок квалитет на рецензии. Корисно за корисниците што сакаат да ја изберат најдобро оценетата дестинација. 34 34 {{{ 35 SELECT d. imeLokacija, AVG(r.kvalitet) AS prosekKvalitet36 FROM DESTINACIId37 JOIN RECENZII r ON d.idDest = r.idDest38 GROUP BY d. imeLokacija39 ORDER BY prosekKvalitetDESC35 SELECT d.location_name, AVG(r.quality) AS average_quality 36 FROM travel_sage.destination d 37 JOIN travel_sage.review r ON d.id_destination = r.id_destination 38 GROUP BY d.location_name 39 ORDER BY average_quality DESC 40 40 LIMIT 10; 41 41 }}} 42 42 43 43 44 === Дестинации со најголем број на активности под различни цен и т.е.опсези44 === Дестинации со најголем број на активности под различни ценовни опсези 45 45 Приказ на дестинациите и брои колку активности постојат во различни ценовни групи (пример под 20, под 50, под 100 евра). Тоа му помага на корисникот да избере дестинација според неговиот буџет и преференции за активности. 46 46 {{{ 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 aktivnostiPod10051 FROM DESTINACIId52 JOIN AKTIVNOSTI a ON d.idDest = a.idDest53 GROUP BY d. imeLokacija54 ORDER BY a ktivnostiPod20 DESC, aktivnostiPod50 DESC, aktivnostiPod100 DESC;47 SELECT 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 51 FROM travel_sage.destination d 52 JOIN travel_sage.activity a ON d.id_destination = a.id_destination 53 GROUP BY d.location_name 54 ORDER BY activities_under20 DESC, activities_under50 DESC, activities_under100 DESC; 55 55 }}} 56 56 … … 59 59 Се прикажуваат дестинации со евтини активности. 60 60 {{{ 61 SELECT d. imeLokacija,62 COUNT(a.id Aktivnost) 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 procentEfiniAktivnosti65 FROM DESTINACIId66 JOIN AKTIVNOSTI a ON d.idDest = a.idDest67 GROUP BY d. imeLokacija68 HAVING COUNT(a.id Aktivnost) > 069 ORDER BY procent EfiniAktivnosti DESC;61 SELECT 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 65 FROM travel_sage.destination d 66 JOIN travel_sage.activity a ON d.id_destination = a.id_destination 67 GROUP BY d.location_name 68 HAVING COUNT(a.id_activity) > 0 69 ORDER BY procent_efini_aktivnosti DESC; 70 70 }}} 71 71 … … 74 74 Најактивни корисници т.е. оние кои имаат напишано најголем број на рецензии. 75 75 {{{ 76 SELECT idKorisnik, COUNT(*) AS broj_recenzii 77 FROM RECENZII 78 GROUP BY idKorisnik 79 HAVING COUNT(*) > (SELECT COUNT(*) * 0.9 FROM RECENZII); 76 SELECT u.id_user, COUNT(r.id_review) AS broj_recenzii 77 FROM travel_sage.users u 78 JOIN travel_sage.review r ON u.id_user = r.id_user 79 GROUP BY u.id_user 80 ORDER BY broj_recenzii DESC 81 LIMIT 10; 80 82 }}} 81 83 … … 84 86 Пресметување на цената по ден за пакети, што помага да се дознае кој пакет има најдобра вредност според сумата. Во случај да има пакет од 20 евра за 1 ден или пакет од 50 евра за 1 недела, би можело да се прикаже која опција е најисплатлива. 85 87 {{{ 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 ); 88 SELECT p.package_name, (p.price / GREATEST(DATE_PART('day', p.end_date - p.start_date), 1)) AS cena_po_den 89 FROM travel_sage.package p 90 ORDER BY cena_po_den ASC 91 LIMIT 1; 93 92 }}} 94 93 … … 97 96 Помага да се следи трендот на резервации преку времето. 98 97 {{{ 99 SELECT MONTH(vremenskaTochka) AS mesec, COUNT(idRezervacija) AS broj_rezervacii100 FROM REZERVACII101 GROUP BY MONTH(vremenskaTochka)98 SELECT DATE_TRUNC('month', r.time_point) AS mesec, COUNT(r.id_reservation) AS broj_rezervacii 99 FROM travel_sage.reservation r 100 GROUP BY mesec 102 101 ORDER BY mesec; 103 102 }}} … … 107 106 Покажување на новорегистрираните корисници по месец. Овозможува да се види растот на бројот на корисници во различни месеци. 108 107 {{{ 109 SELECT MONTH(datumRagjanje) AS mesec, COUNT(idKorisnik) AS broj_novi_korisnici110 FROM KORISNICI111 GROUP BY MONTH(datumRagjanje)108 SELECT DATE_TRUNC('month', u.birth_date) AS mesec, COUNT(u.id_user) AS broj_novi_korisnici 109 FROM travel_sage.users u 110 GROUP BY mesec 112 111 ORDER BY mesec; 113 112 }}} … … 117 116 Ги брои пакетите што се резервирани по месец. Можност за следење на популарноста на различни пакети во текот на годината. 118 117 {{{ 119 SELECT MONTH(p.pochetok) AS mesec, COUNT(p.idPaket) AS broj_paketi120 FROM PAKETIp121 JOIN REZERVACII r ON p.idRezervacija = r.idRezervacija122 GROUP BY MONTH(p.pochetok)118 SELECT DATE_TRUNC('month', p.start_date) AS mesec, COUNT(pr.id_package) AS broj_paketi 119 FROM travel_sage.package p 120 JOIN travel_sage.package_reservation pr ON p.id_package = pr.id_package 121 GROUP BY mesec 123 122 ORDER BY mesec; 124 123 }}} … … 128 127 Корисно е за да се согледа колку настани се организирани секој месец. 129 128 {{{ 130 SELECT MONTH(pochetenDatum) AS mesec, COUNT(idNastan) AS broj_nastani131 FROM NASTANI132 GROUP BY MONTH(pochetenDatum)129 SELECT DATE_TRUNC('month', e.start_date) AS mesec, COUNT(e.id_event) AS broj_nastani 130 FROM travel_sage.event e 131 GROUP BY mesec 133 132 ORDER BY mesec; 134 133 }}} … … 138 137 Овде е прикажана бројката на активности по категорија, со цел да се утврди која активност е најпопуларна во текот на месецот. 139 138 {{{ 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 139 SELECT DATE_TRUNC('month', r.time_point) AS mesec, a.category, COUNT(a.id_activity) AS broj_aktivnosti 140 FROM travel_sage.reservation r 141 JOIN travel_sage.activity_reservation ar ON r.id_reservation = ar.id_reservation 142 JOIN travel_sage.activity a ON ar.id_activity = a.id_activity 143 GROUP BY mesec, a.category 144 144 ORDER BY mesec, broj_aktivnosti DESC; 145 145 }}} … … 149 149 Статистика за секој корисник по месец, вклучувајќи број на резервации и активности. Така, се гледа активноста на корисниците и популарноста на нивните активности. 150 150 {{{ 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 151 SELECT 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 154 FROM travel_sage.users u 155 JOIN travel_sage.reservation r ON u.id_user = r.id_user 156 LEFT JOIN travel_sage.activity_reservation ar ON r.id_reservation = ar.id_reservation 157 GROUP BY mesec, u.id_user 156 158 ORDER BY mesec, broj_rezervacii DESC; 157 159 }}} 158 160 159 161 162 === Просечен попуст на премиум корисници 163 {{{ 164 SELECT AVG(pu.discount) AS prosek_popust 165 FROM premium pu; 166 }}} 160 167 168 169