| Version 24 (modified by , 22 months ago) ( diff ) | 
|---|
Напредни извештаи од базата (SQL и складирани процедури)
Прикажување на совет чија што дата на побарување не е постара од 6 месеци гледано од денешната дата, прикажување на корисник кој го побарал советот и прикажување на број на одговори на прашањето.
SELECT
        bpc.id AS consultation_id,
        bpc.date_askes AS claim_date,
        bpc.title AS consultation_title,
        bpc.description AS consultation_description,
        u.id AS user_id,
        u.name AS user_name,
        COUNT(bpa.id) AS answers_count
    FROM
        project.blog_post_for_consultations bpc
    LEFT JOIN
        project.users u ON bpc.users_id = u.id
    LEFT JOIN
        project.blog_post_answers bpa ON bpc.id = bpa.blogpostconsid
    WHERE
        bpc.date_askes >= current_date - interval '6 months'
    GROUP BY
        bpc.id, bpc.date_askes, bpc.title, bpc.description, u.id, u.name
    ORDER BY
        answers_count DESC
    LIMIT 1;
Прикажување на вработен (доктор) кој што има напишено најмногу извештаи за едно исто милениче.
WITH DoctorReportsCount AS (
    SELECT
        u.id AS doctor_id,
        u.name AS doctor_name,
        r.petsID AS pet_id,
        COUNT(r.id) AS reports_count
    FROM
        project.reports r
    LEFT JOIN
        project.users u ON r.usersID = u.id
    GROUP BY
        u.id, u.name, r.petsID
    ORDER BY
        reports_count DESC
    LIMIT 1
)
SELECT
    drc.doctor_id,
    drc.doctor_name,
    drc.pet_id,
    drc.reports_count
FROM
    DoctorReportsCount drc;
Прикажување на продукт кој е прв додаден во системот за продажба и за него постојат најмалку нарачки кои биле направени од корисниците.
   SELECT
    p.id AS product_id,
    p.name AS product_name,
    p.description AS product_description,
    p.price AS product_price,
    MIN(o.quantity) AS sold_quantity,
    p.dateadded AS date_added
FROM
    project.products p
LEFT JOIN
    project.product_are_made_orders pamo ON p.id = pamo.id_products
LEFT JOIN
    project.orders o ON pamo.id_orders = o.id
GROUP BY
    p.id, p.name, p.description, p.price, p.dateadded
ORDER BY
    sold_quantity, date_added
LIMIT 1;
Секој ветеринарен центар колку вкупно миленичиња примил и колку е просечната возраст во секој ветеринарен центар.
 SELECT
    vc.name AS vet_center_name,
  --  vc.description AS vet_center_description,
    COUNT(DISTINCT pvvc.id_pets) AS number_of_pets_treated,
    AVG(EXTRACT(YEAR FROM age(current_date, p.dateofbirthday))) AS average_pet_age
FROM
    project.vet_centers vc
JOIN
    project.pets_visit_vet_centers pvvc ON vc.id = pvvc.id_vet_centers
JOIN
    project.pets p ON pvvc.id_pets = p.id
GROUP BY
    vc.id, vc.name, vc.description
ORDER BY
    number_of_pets_treated DESC;
Koja e најновата терапија според датум која е препишена, за која дијагноза е препишена, и во кој ветеринарен центар е препишена.
 WITH LatestTherapies AS (
    SELECT
        ptvc.id_pets,
        MAX(t.appoitmentDate) AS latest_therapy_date
    FROM
        project.pets_visit_vet_centers ptvc
    JOIN
        project.therapy t ON ptvc.id_pets = t.diagnosticsID
    GROUP BY
        ptvc.id_pets
)
SELECT
    vc.name AS vet_center_name,
    p.id AS pet_id,
    --p.description AS pet_description,
    d.description AS diagnosis_description,
    t.description AS latest_therapy_description,
    lt.latest_therapy_date
FROM
    project.vet_centers vc
JOIN
    project.pets_visit_vet_centers ptvc ON vc.id = ptvc.id_vet_centers
JOIN
    project.pets p ON ptvc.id_pets = p.id
JOIN
    project.diagnostics d ON p.id = d.usersID
LEFT JOIN
    LatestTherapies lt ON p.id = lt.id_pets
LEFT JOIN
    project.therapy t ON lt.latest_therapy_date = t.appoitmentDate AND p.id = t.diagnosticsID
ORDER BY
   latest_therapy_date DESC;
Прикажување на мобилен оператор на кој што се најчесто корисниците претплатници. Доколку мобилниот оператор Telecom започнува на 072 или 071, мобилниот оператор VIP започнува на 078 или 075.
   SELECT
    CASE
        WHEN SUBSTRING(u.number, 1, 3) IN ('072', '071') THEN 'Telecom'
        WHEN SUBSTRING(u.number, 1, 3) IN ('078', '075') THEN 'VIP'
        ELSE 'Other Operator'
    END AS mobile_operator,
    COUNT(u.id) AS number_of_users
FROM
    project.users u
where
    u.number LIKE '072%' OR
    u.number LIKE '071%' OR
    u.number LIKE '078%' OR
    u.number LIKE '075%'
GROUP BY
    mobile_operator
ORDER BY
    number_of_users DESC;
Kолку пари се трошат за платите на вработените во секој ветеринарен центар.
   SELECT
    vc.name AS vet_center_name,
    SUM(CASE WHEN j.predictedSalery LIKE '%EUR%' THEN CAST(SUBSTRING(j.predictedSalery, 1, POSITION(' ' IN j.predictedSalery) - 1) AS DECIMAL) ELSE 0 END) AS total_salary_expense
FROM
    project.vet_centers vc
JOIN
    project.jobs j ON vc.id = j.vetCentersID
LEFT JOIN
    project.users u ON vc.id = u.jobs_id
GROUP BY
    vc.id, vet_center_name
ORDER BY
   total_salary_expense DESC;
Прикажување на ветеринарни центри кои што корисникот може да ги посети доколку живее во Охрид.
SELECT vc.name AS vet_center_name, vc.description AS vet_center_description, vc.adress AS vet_center_address, vc.phoneNumber AS vet_center_phone_number FROM project.vet_centers vc JOIN project.cities c ON vc.citiesID = c.ID WHERE c.name = 'Ohrid';
Прикажување кој корисник има најголем број на миленичиња.
SELECT u.name, u.lastname, COUNT(p.ID) AS pet_count FROM project.users u JOIN project.pets p ON u.ID = p.usersID GROUP BY u.ID ORDER BY pet_count DESC LIMIT 1;
Прикажување која раса е најчесто застапена.
SELECT b.name AS breed_name, COUNT(p.ID) AS pet_count FROM project.breeds b JOIN project.type_of_pets t ON b.ID = t.ID JOIN project.pets p ON t.ID = p.typeOfPetsID GROUP BY b.ID ORDER BY pet_count DESC LIMIT 1;
Прикажување која терапија за која дијагноза е препишена и од кој доктор е препишена.
 SELECT
    t.description AS therapy_description,
    d.description AS diagnosis_description,
    u.name AS doctor_name,
    u.lastname AS doctor_lastname
FROM
    project.therapy t
JOIN
    project.diagnostics d ON d.id = t.diagnosticsID
JOIN
    project.users u ON u.id = d.usersID
JOIN
    project.pets p ON p.id = d.usersID
ORDER BY
    t.id;
Прикажување на возраста на секое милениче.
SELECT p.ID AS pet_id, p.color, p.description AS pet_description, p.dateOfBirthday, AGE(current_date, p.dateOfBirthday) AS pet_age FROM project.pets p;
Прикажување на држава која е најчест производител на лекови.
select state as country, COUNT(*) as most_common_manufacturer from project.manufacturers group by state order by most_common_manufacturer desc limit 1;
Прикажување на продукти кои што би можело да се потрошат најбрзо бидејќи има побарано најголема количина за нив.
SELECT p.name AS product_name, p.description AS product_description, AVG(o.quantity) AS avg_sales_quantity FROM project.products p JOIN project.product_are_made_orders po ON p.ID = po.id_products JOIN project.orders o ON po.id_orders = o.ID GROUP BY p.ID ORDER BY avg_sales_quantity DESC;
  Note:
 See   TracWiki
 for help on using the wiki.
    
