Changes between Version 4 and Version 5 of Напредни извештаи од базата (SQL и складирани процедури)


Ignore:
Timestamp:
01/17/25 07:26:47 (5 days ago)
Author:
201205
Comment:

--

Legend:

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

    v4 v5  
    11== Напредни извештаи од базата
     2
     3
     4* Извештај за вкупниот број на корисници на апликацијата, просечниот рејтинг на корисниците, и просечниот број на размени на книги меѓу корисниците.
     5
     6{{{
     7create view user_app_stats as
     8
     9select
     10    (select count(*) from AppUser) as TotalAppUsers,
     11    coalesce((
     12        select avg(averageUserRating)
     13        from(
     14            select r.ReceiverId, avg(r.Rating) as averageUserRating
     15            from Review r
     16            group by r.ReceiverId
     17        ) as ratings
     18    ), 0) as AverageUserRating,
     19    coalesce((
     20        select avg(transaction_count)
     21        from(
     22            select t.BorrowerId, count(*) as transaction_count
     23            from Transaction t
     24            group by t.BorrowerId
     25        ) as transactions
     26    ), 0) as AverageUserTransactions
     27}}}
     28
     29* Извештај за секој член на апликацијата за последните три месеци, бројот на пријатели што ги има тој корисник, бројот на критики што ги примил, бројот на книги што ги има во библиотеката, и бројот на пријави од останатите корисници, подредени од корисникот со најголем број книги до корисникот со најмал број книги.
     30
     31{{{
     32create view user_stats as
     33
     34select u.UserId, u.FirstName, u.LastName,
     35    coalesce((
     36        select count(*)
     37        from FriendRequest fr
     38        where (fr.SenderId=u.UserId or fr.ReceiverId=u.UserId)
     39        and fr.Status='Accepted'
     40    ), 0) as NumberOfFriends,
     41    coalesce((
     42        select count(*)
     43        from Review r
     44        where r.GiverId= u.UserId
     45    ), 0) as NumberOfReviews,
     46    coalesce((
     47        select count(*)
     48        from Library l join LibraryBook lb on l.InventoryId = lb.InventoryId
     49        where l.UserId=u.UserId
     50    ), 0) as NumberOfBooksOwned,
     51    coalesce((
     52        select count(*)
     53        from Report r
     54        where r.ReportedUserId = u.UserId and r.ReportDate>=CURRENT_DATE-INTERVAL '3 months'
     55    ), 0) as NumberOfReportsReceived
     56from AppUser u
     57order by NumberOfBooksOwned desc;
     58}}}
     59
     60* Извештај за најчесто позајмуваните книги по година и тримесечје
     61
     62{{{
     63select
     64    extract(year from t.BorrowDate) as year,
     65    extract(quarter from t.BorrowDate) as quarter,
     66    b.Title, b.Author, count(*) as NumberOfTimesBorrowed
     67from Transaction t join TransactionBook tb on t.TransactionId=tb.TransactionId join Book b on tb.BookId = b.BookId
     68group by
     69    extract(year from t.BorrowDate),
     70    extract(quarter from t.BorrowDate),
     71    b.BookId, b.Title, b.Author
     72order by year desc, quarter desc, NumberOfTimesBorrowed desc;
     73}}}
     74
     75* Извештај за бројот на испратени, одобрени, одбиени и нерешени барања за книги за секој квартал од минатата година.
     76
     77{{{
     78select
     79    extract(quarter from RequestDate) as Quarter,
     80    count(case when RequestStatus='Approved' then 1 end) as ApprovedBookRequests,
     81    count(case when RequestStatus='Pending' then 1 end) as PendingBookRequests,
     82    count(case when RequestStatus='Declined' then 1 end) as DeclinedBookRequests
     83from BookRequest
     84where extract(year from RequestDate) = extract(year from now()) -1
     85group by extract(quarter from RequestDate)
     86order by Quarter;
     87}}}
     88
     89* Извештај за десетте најмногу додавани книги во листата на желби, по бројот додавања во листата
     90
     91{{{
     92select b.Title, b.Author, count(*) as TimesAddedToWishlist
     93from WishlistBook wb join Book b on wb.BookId = b.BookId
     94group by b.BookId, b.Title, b.Author
     95order by TimesAddedToWishlist desc
     96limit 10;
     97}}}
    298
    399* Извештај за името на книгата која била најмногу пати разменета во текот на дадена година