wiki:AdvancedReports

Za sekoj restoran da se najdat menu items koi se najcesto prodavani, vkupna kolicina na prodadeni menu items i vkupna zarabotka i cena na item-ot

WITH kolicina_na_mrodadeni_menu_items_po_restoran AS (
SELECT n.restoran_id, nsm.menuitem_id, COUNT(DISTINCT n.id) AS br_prodadeni_menuitems_po_restoran
FROM naracka n
JOIN naracka_sodrzi_menu_item nsm ON n.id=nsm.naracka_id
JOIN naplata na ON na.naracka_id=n.id
GROUP BY n.restoran_id, nsm.menuitem_id
), presmetka_najprodavan_menu_item_po_restoran AS(
SELECT restoran_id, menuitem_id, br_prodadeni_menuitems_po_restoran, ROW_NUMBER() OVER(PARTITON BY restoran_id, menuitem_id ORDER BY br_prodadeni_menuitems_po_restoran DESC) RN
FROM kolicina_na_mrodadeni_menu_items_po_restoran
)
SELECT r.ime AS ime_na_restoran, mi.ime AS najprodavan_menu_item, br_prodadeni_menuitems_po_restoran AS prodadena_kolicina, mi.cena AS cena_na_menu_item, (br_prodadeni_menuitems_po_restoran*mi.cena) AS vkupna_zarabotka_od_najprodavan_menu_item
FROM presmetka_najprodavan_menu_item_po_restoran nmipr
JOIN restoran r ON nmipr.restoran_id=r.id
JOIN menu_item mi ON nmipr.menuitem_id=mi.id
WHERE RN=1;

Za sekoj restoran da se najde potrosuvacot(potrosuvacite) koj napravil najmnogu naracki za tekovnata godina, kolku naracki napravil vo restoranot i da se izlista adresa i telefonski broj na potrosuvacot

WITH broj_na_naracki_potrosuvac_restoran_tekovna_godina AS(
SELECT n.potrosuvac_id, n.restoran_id, COUNT(DISTINCT n.id) AS broj_na_naracki
FROM naracka n
WHERE extract(year from n.datum)=extract(year from now())
GROUP BY n.potrosuvac_id, n.restoran_id
), presmetka_najveren_potrosuvac_po_restoran_za_tekovna_godina AS(
SELECT n.restoran_id, max(broj_na_naracki) as max_broj_naracki
FROM broj_na_naracki_potrosuvac_restoran_tekovna_godina
)
SELECT p.address AS adresa_na_najveren_potrosuvac, p.br_telefon AS br_telefon_na_najveren_potrosuvac, a.broj_na_naracki, r.ime AS ime_na_restoran
FROM broj_na_naracki_potrosuvac_restoran_tekovna_godina a
JOIN presmetka_najveren_potrosuvac_po_restoran_za_tekovna_godina b ON a.restoran_id=b.restoran_id AND a.broj_na_naracki=b.max_broj_naracki
JOIN potrosuvac p ON p.korisnik_id=a.potrosuvac_id
JOIN restoran r ON a.restoran_id=r.id;

Restoran so najmnogu naracki vo poslednite tri meseci

CREATE VIEW restoran_broj_naracki AS
SELECT n.restoran_id, COUNT(DISTINCT n.id) AS broj_na_naracki
FROM naracka n
WHERE n.datum between (now()-interval '3 months') and now()
GROUP BY n.restoran_id;

SELECT r.ime AS ime_na_restoran, rbn.broj_na_naracki
FROM restoran_broj_naracki rbn
JOIN restoran r ON rbn.restoran_id=r.id
WHERE rbn.broj_na_naracki = (SELECT MAX(broj_na_naracki) FROM restoran_broj_naracki);

Zarabotka otstvarena preku narackite od aplikacijata za sekoj restoran na mesecno nivo

SELECT r.ime, DATE_PART('Month', n.datum) AS mesec, DATE_PART('Year', n.datum) AS godina, SUM(iznos) AS zarabotka
FROM restoran r
JOIN menu_item m ON r.id=m.restoran_id
JOIN naracka_sodrzi_menu_item nsm ON m.id=nsm.menu_item_id
JOIN naracka n ON nsm.naracka_id=n.id
JOIN naplata np ON n.id=np.naracka_id
GROUP BY r.ime, DATE_PART('Month', n.datum), DATE_PART('Year', n.datum);

Kolicina na prodadeni parcinja za sekoj proizvod ponuden vo restoranite, podredeni po popularnost na godisno nivo (najnaracuvaniot proizvod prv)

SELECT m.ime, DATE_PART('Year', n.datum) AS godina, SUM(nsm.quantity) AS kolicina
FROM menu_item m
JOIN naracka_sodrzi_menu_item nsm ON m.id=nsm.menu_item_id
JOIN naracka n ON nsm.naracka_id=n.id
GROUP BY m.ime, DATE_PART('Year', n.datum)
ORDER BY SUM(nsm.quantity) DESC;

Broj na naracki za sekoj restoran za sekoj mesec

SELECT r.ime, DATE_PART('Month', n.datum) AS mesec, DATE_PART('Year', n.datum) as godina, count(nsm.naracka_id) AS broj_na_naracki
FROM restoran r
JOIN menu_item m ON r.id=m.restoran_id
JOIN naracka_sodrzi_menu_item nsm ON m.id=nsm.menu_item_id
JOIN naracka n on nsm.naracka_id=n.id
GROUP BY r.ime, DATE_PART('Month', n.datum), DATE_PART('Year', n.datum);

Pregled na broj na naracki po tip na naplata za sekoj restoran na mesecno nivo

SELECT r.ime, np.nacin_na_plakjane, DATE_PART('Month', n.datum) AS mesec, DATE_PART('Year', n.datum) as godina, COUNT(DISTINCT n.id) AS broj_na_naracki
FROM restoran r
JOIN menu_item m ON r.id=m.restoran_id
JOIN naracka_sodrzi_menu_item nsm ON m.id=nsm.menu_item_id
JOIN naracka n on nsm.naracka_id=n.id
JOIN naplata np ON n.id=np.naracka_id
GROUP BY r.ime, np.nacin_na_plakjane, DATE_PART('Month', n.datum), DATE_PART('Year', n.datum);
Last modified 3 weeks ago Last modified on 04/22/24 20:04:31
Note: See TracWiki for help on using the wiki.