(* the complex query that calculates the scores *) val query = `select wine.wid, name, year, avg(rating) as average, count(*) as ratings from wine, rating where wine.wid = rating.wid group by wine.wid, name, year order by average desc, name, year` fun formatRow (g, acc) = let val avg = g "average" val avgInt = case Int.fromString avg of SOME i => i | NONE => case Real.fromString avg of SOME r => floor r | NONE => raise Fail "Error in formatRow" val wid = g "wid" in acc ^^ `^(g "name") (year ^(g "year")) ^(RatingUtil.bottleImgs avgInt) ^(g "ratings") rate it` end val _ = RatingUtil.returnPageWithTitle "Best Wines" (`
WineAverage Score (out of 6) Ratings ` ^^ (Db.fold formatRow `` query) ^^ `

Rate new wine - type its name and year

Name:  Year: 
`)