Напредни извештаи од базата (SQL)
Дестинации со најголем број на разновидни настани
Идентификување на дестинации кои имаат најголем број на различни видови настани. Во долунаведениот код се пребаруваат сите дестинации и ги брои различните видови на настани (како концерти, фестивали, саеми и сл.) поврзани со секоја дестинација. Потоа, резултатите се сортираат по бројот на различни настани во опаѓачки редослед и се добива еден вид на рангирање. Од особено значење за корисници што сакаат да вклучат повеќе разновидни настани при нивното патување.
SELECT d.imeLokacija, COUNT(DISTINCT n.kategorija) AS brojRaznovidniNastani FROM DESTINACII d JOIN NASTANI n ON d.idDest = n.idDest GROUP BY d.imeLokacija ORDER BY brojRaznovidniNastani DESC;
Настани на одредена дестинација
Дополнително, за да се прикажат различни категории на настани за одредена дестинација. За пример, доколку сакате да ги видите сите видови настани што се одржуваат во Охрид:
SELECT DISTINCT n.kategorija FROM NASTANI n JOIN DESTINACII d ON n.idDest = d.idDest WHERE d.imeLokacija = 'Охрид';
Топ 10 дестинации според рецензии (атрибут kvalitet)
Овде се зема просечниот квалитет на рецензиите за секоја дестинација и ги прикажува првите 10 дестинации со највисок квалитет на рецензии. Корисно за корисниците што сакаат да ја изберат најдобро оценетата дестинација.
SELECT d.imeLokacija, AVG(r.kvalitet) AS prosekKvalitet FROM DESTINACII d JOIN RECENZII r ON d.idDest = r.idDest GROUP BY d.imeLokacija ORDER BY prosekKvalitet DESC LIMIT 10;
Дестинации со најголем број на активности под различни цени т.е. опсези
Приказ на дестинациите и брои колку активности постојат во различни ценовни групи (пример под 20, под 50, под 100 евра). Тоа му помага на корисникот да избере дестинација според неговиот буџет и преференции за активности.
SELECT d.imeLokacija, SUM(CASE WHEN a.iznos < 20 THEN 1 ELSE 0 END) AS aktivnostiPod20, SUM(CASE WHEN a.iznos < 50 THEN 1 ELSE 0 END) AS aktivnostiPod50, SUM(CASE WHEN a.iznos < 100 THEN 1 ELSE 0 END) AS aktivnostiPod100 FROM DESTINACII d JOIN AKTIVNOSTI a ON d.idDest = a.idDest GROUP BY d.imeLokacija ORDER BY aktivnostiPod20 DESC, aktivnostiPod50 DESC, aktivnostiPod100 DESC;
Дестинации со најголем процент на достапни(евтини) активности
Се прикажуваат дестинации со евтини активности.
SELECT d.imeLokacija, COUNT(a.idAktivnost) AS vkupnoAktivnosti, SUM(CASE WHEN a.iznos < 20 THEN 1 ELSE 0 END) AS efiniAktivnosti, (SUM(CASE WHEN a.iznos < 20 THEN 1 ELSE 0 END) * 100.0 / COUNT(a.idAktivnost)) AS procentEfiniAktivnosti FROM DESTINACII d JOIN AKTIVNOSTI a ON d.idDest = a.idDest GROUP BY d.imeLokacija HAVING COUNT(a.idAktivnost) > 0 ORDER BY procentEfiniAktivnosti DESC;
Топ 10 корисници со најголем број напишани рецензии
Најактивни 10 корисници т.е. оние кои имаат напишано најголем број на рецензии.
SELECT k.ime, k.prezime, COUNT(r.idRecenzija) AS brojRecenzii FROM KORISNICI k JOIN RECENZII r ON k.idKorisnik = r.idKorisnik GROUP BY k.idKorisnik, k.ime, k.prezime ORDER BY brojRecenzii DESC LIMIT 10;
Најисплатливи пакети (Best value for money)
Пресметување на цената по ден за пакети, што помага да се дознае кој пакет има најдобра вредност според сумата. Во случај да има пакет од 20 евра за 1 ден или пакет од 50 евра за 1 недела, би можело да се прикаже која опција е најисплатлива.
SELECT p.imePaket, p.cena, TIMESTAMPDIFF(DAY, p.pochetok, p.kraj) AS vremeTraenjeDena, p.cena / TIMESTAMPDIFF(DAY, p.pochetok, p.kraj) AS cenaPoDen FROM PAKETI p WHERE TIMESTAMPDIFF(DAY, p.pochetok, p.kraj) > 0 ORDER BY cenaPoDen ASC LIMIT 10;