wiki:AdvancedReports

Напредни извештаи од базата (SQL и складирани процедури)

Местоположба на автомобили, при што со едно query имаме податоци за која компанија, кој бизнис корисник, брендот на автомобилот, моделот, дали е достапна, вид на автомобил (mini, big, hatchback),тип на менувач (автоматик, мануелен), боја на автомобил и град во кој се наоѓа автомобилот

select insq.company_name, insq.username, 
                f.brand, f.model_name, f.valid_thru, 
                f.is_available, f.vehicle_type, 
                f.transmission, f.color,
                f.city
        from (
                select c.company_name,u.username, c.company_id 
                        from companies c 
                                join business_users bu
                                        on c.business_user_id = bu.user_id
                                join users u 
                                        on bu.user_id = u.user_id               
        ) insq
                join (
                        select vehicle_id, 
                                        c2.company_id, brand, 
                                        model_name, r.valid_thru,
                                        r.is_available,m.vehicle_type,
                                        m.transmission,m.color,
                                        l.city 
                                from vehicles v 
                                        join companies c2 on v.company_id = c2.company_id 
                                        join models m on m.model_id = v.model_id
                                        join registrations r on r.registration_id = v.registration_id 
                                        join locations l on l.location_id = v.location_id 
        ) f on insq.company_id = f.company_id
        order by company_name

Најизнајмуван автомобил во текот на изминатите два месеци земено во однос на тековниот датум

select
        v.brand ,
        v.chassis_number,
        c.vehicle_id,
        m.model_name,
        m.color,
        c3.company_name,
        count(*) as br_iznajmuvanja
from
        contracts c
join vehicles v on
        v.vehicle_id = c.vehicle_id
join models m on
        v.model_id = m.model_id
join companies c3 on
        c3.company_id = v.company_id
where
        (c.signed_date - interval '2 months')<= c.signed_date
        and c.signed_date <= now()
group by
        c.vehicle_id ,
        v.brand ,
        v.chassis_number ,
        m.model_name ,
        m.color,
        c3.company_name
having
        count(*) = (
        select
                max(br_iznajmuvanja)
        from
                (
                select
                        vehicle_id,
                        count(*) as br_iznajmuvanja
                from
                        contracts c2
                group by
                        vehicle_id) contracts)

Да се најде клиент што има направено најголем приход независно од која компанија изнајмувал автомобил

select
        a.user_id,
        b.username,
        a.prihod
from
        (
        select
                user_id,
                sum(v.daily_rental_price * (c.end_date - c.start_date)) as prihod
        from
                contracts c
        join vehicles v on
                v.vehicle_id = c.vehicle_id
        group by
                c.user_id ) a
join (
        select
                c.user_id,
                u.username
        from
                clients as c
        join users u on
                u.user_id = c.user_id 
                        ) b on
        a.user_id = b.user_id
where
        a.prihod = 
                                (
        select
                max(prihod)
        from
                (
                select
                        user_id,
                        sum(v2.daily_rental_price * (c4.end_date - c4.start_date)) as prihod
                from
                        contracts c4
                join vehicles v2 on
                        v2.vehicle_id = c4.vehicle_id
                group by
                        user_id) maximprihod

Доставувач кој што има доставено најмногу автомобили (најдобар работник)

select
        a.delivery_man_id,
        a.username,
        a.company_name,
        a.broj_dostavi
from
        (
        select
                c.delivery_man_id, 
                        u.username,
                        c2.company_name,
                        count(*) as broj_dostavi
        from
                contracts c
        join delivery_man dm on
                dm.user_id = c.delivery_man_id
        join users u on
                u.user_id = dm.user_id
        join companies c2 on 
                c2.company_id = dm.company_id
        group by
                c.delivery_man_id,
                u.username,
                c2.company_name
) a
where
        a.broj_dostavi = (
        select
                max(broj_dostavi)
        from
                (
                select
                        c.delivery_man_id, 
                        count(*) as broj_dostavi
                from
                        contracts c
                group by
                        c.delivery_man_id
                ) b
        )

Локации подредени според тоа колку автомобили има во тој град место и која компанија го нуди

select l.city , count(l.city) as num_of_vehicles from vehicles v
        join locations l on v.location_id = l.location_id 
                group by l.city
                        order by num_of_vehicles desc;

Број на автомобили кои што ги нуди една компанија во некој град

select  c.company_name, count(vehicle_id) as counter from vehicles v
        join locations l on l.location_id = v.location_id 
        join companies c on c.company_id = v.company_id 
                where l.city = 'Skopje'
                        group by  c.company_id , c.company_name;

Регистрации на сите автомобили што биле изнајмени повеќе од десет дена

select v.brand, m.model_name, r.plate_num from vehicles v
        join models m on v.model_id = m.model_id
        join registrations r on v.registration_id = r.registration_id
        join contracts c on c.vehicle_id = v.vehicle_id 
                where c.end_date - c.signed_date >= 10

Компании кои што имаат направено промет поголем од просечниот од сите компании заедно од издавање на автомобили

select c.company_name, 
                sum(v.daily_rental_price) as prihod
        from vehicles v
        join companies c on v.company_id = c.company_id 
                group by c.company_name
                        having sum(v.daily_rental_price) > AVG(V.daily_rental_price)
Last modified 17 months ago Last modified on 12/23/22 12:18:08
Note: See TracWiki for help on using the wiki.