(* 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 ^^ `
Wine | Average Score (out of 6) | Ratings | ` ^^ (Db.fold formatRow `` query) ^^ ` |
---|