diff --git a/src/libs/middlewares/reqBody.js b/src/libs/middlewares/reqBody.js
index e1f80cb188302ea86d1335caf41d8b66ba8981a3..9df7ebcaeb827836d5a93dbc85f28e0ba33b702d 100644
--- a/src/libs/middlewares/reqBody.js
+++ b/src/libs/middlewares/reqBody.js
@@ -2,6 +2,32 @@ class ReqBody {
     constructor() {
 
     }
+
+    add_metrics(req, column, metricsArray) {
+        for (let i in metricsArray) {
+            switch(metricsArray[i]["function"]) {
+                case "max":
+                    req.sql.field("max(" + column + ")", metricsArray[i]["return_name"]);
+                    req.hasMetrics = true;
+                    break;
+                case "min":
+                    req.sql.field("min(" + column + ")", metricsArray[i]["return_name"]);
+                    req.hasMetrics = true;
+                    break;
+                case "count":
+                    req.sql.field("count(" + column + ")", metricsArray[i]["return_name"]);
+                    req.hasMetrics = true;
+                    break;
+                case "sum":
+                    req.sql.field("sum(" + column + ")", metricsArray[i]["return_name"]);
+                    req.hasMetrics = true;
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+
     parse() {
         return(req, res, next) => {
             // Gets body of the HTTP requisition
@@ -10,8 +36,17 @@ class ReqBody {
             // Chooses operation based on the mode field of the body
             switch(body["mode"]) {
                 case "add_metrics":
-                    console.log(body);
+                    // adds flag to check whether it runs the default query or not
+                    req.hasMetrics = false;
+                    // Gets all column names
+                    let columns = Object.keys(body["add_metrics"]);
+                    // Calls function to add metrics that were specified to req.sql
+                    for (let i in columns) {
+                        this.add_metrics(req, columns[i], body["add_metrics"][columns[i]]);
+                    }
+
                     break;
+
                 default:
                     break;
             }
diff --git a/src/libs/routes/testroute.js b/src/libs/routes/testroute.js
index 2f108eb798d3b2126ce75c1a25d34b75e545bd8a..97e28b905146d45d8ea478e8c324924619f2232a 100644
--- a/src/libs/routes/testroute.js
+++ b/src/libs/routes/testroute.js
@@ -176,12 +176,21 @@ rqf.addField({
 });
 
 testApp.get('/', rqf.parse(), rqf.build(), reqBody.parse(), (req, res, next) => {
-    req.sql.from('escola')
-        .field('ano_censo')
-        .field('count(*)', 'total')
-        .group('ano_censo').order('ano_censo')
-        .where('escola.situacao_funcionamento_pareada = 1 AND (escola.ensino_regular = 1 OR escola.ensino_eja=1 or escola.educacao_profissional=1)')
-    console.log(req.sql.toString());
+    // Runs default query
+    if (!req.hasMetrics) {
+        req.sql.from('escola')
+            .field('ano_censo')
+            .field('count(*)', 'total')
+            .group('ano_censo').order('ano_censo')
+            .where('escola.situacao_funcionamento_pareada = 1 AND (escola.ensino_regular = 1 OR escola.ensino_eja=1 or escola.educacao_profissional=1)')
+    }
+    // Runs modified query
+    else {
+        req.sql.from('escola')
+            .field('ano_censo')
+            .group('ano_censo').order('ano_censo')
+            .where('escola.situacao_funcionamento_pareada = 1 AND (escola.ensino_regular = 1 OR escola.ensino_eja=1 or escola.educacao_profissional=1)')
+    }
     next();
 }, query, response('school'));