diff --git a/src/main/scala/QueryDB.scala b/src/main/scala/QueryDB.scala
index 3f70b18c99e5851351dccd31e8e4e155f2a1b17b..a5a939052a268c28ef3835e207d20f4dcb2d4563 100644
--- a/src/main/scala/QueryDB.scala
+++ b/src/main/scala/QueryDB.scala
@@ -9,13 +9,23 @@ import scala.collection.JavaConverters._
 
 class QueryDB extends RouteBuilder {
 
-  def body2str(ask: Boolean, dirPrefix: String, count: Boolean, subString: String, field: String, b: Object): String = {
+  def body2str(ask: Boolean, dirPrefix: String, count: Boolean,
+               subString: String, field: String, group: String, b: Object): String = {
     try {
       (b.asInstanceOf[util.ArrayList[_]].asScala map {
+        case jm if group.nonEmpty =>
+          val sm = jm.asInstanceOf[util.HashMap[String, Object]].asScala
+          val groupVal = sm.get(group)
+          val countVal = sm.get("count")
+          (groupVal, countVal) match {
+            case (Some(str: String), Some(c: Integer)) =>
+              "occurrence count in \"" + group + "\" : " + c + " \"" + str + "\""
+            case _ => "unexpected result: " + sm
+          }
         case jm if count =>
           (if (ask) "occurrence count in \"" + field + "\" : "
           else "") +
-            jm.asInstanceOf[util.HashMap[String, Integer]].asScala.getOrElse("COUNT(*)", 0) +
+            jm.asInstanceOf[util.HashMap[String, Integer]].asScala.getOrElse("count", 0) +
             " \"" + subString + "\""
         case jm if !count =>
           val sm = jm.asInstanceOf[util.HashMap[String, String]].asScala
@@ -27,13 +37,21 @@ class QueryDB extends RouteBuilder {
     }
   }
 
-  def queryValues(ask: Boolean, dirPrefix: String, count: Boolean, subString: String, field: String): Unit = {
+  def queryValues(ask: Boolean, dirPrefix: String, count: Boolean,
+                  subString: String, field: String, group: String): Unit = {
     val w = field + " LIKE '%" + subString.replaceAll("'", "''") + "%'"
-    val q = "db:SELECT " + (if (count) "COUNT(*)" else "*") + " FROM " + Table.name + " WHERE " + w
+    val q = "db:SELECT " + (group match {
+      case "" if count => "COUNT(*) as count"
+      case "" if !count => "*"
+      case _ => assert(Table.columns.contains(group))
+        group + ", COUNT(" + group + ") as count"
+    }) +
+      " FROM " + Table.name + " WHERE " + w +
+      (if (group.isEmpty) "" else " GROUP BY " + group + " ORDER BY count DESC")
     val d = "direct:" + q
     val r: RouteDefinition = d ==> {
       -->(q).transform(ex =>
-        body2str(ask, dirPrefix, count, subString, field, ex.getIn.getBody))
+        body2str(ask, dirPrefix, count, subString, field, group, ex.getIn.getBody))
       -->("stream:out")
     }
     getContext.addRouteDefinition(r)
@@ -76,8 +94,8 @@ object QueryDB {
           println("next search in field: " + field)
         }
         else {
-          if (ask) dbSearch.queryValues(ask, QueryDB.dirPrefix, count = false, ln, field)
-          dbSearch.queryValues(ask, QueryDB.dirPrefix, count = true, ln, field)
+          if (ask) dbSearch.queryValues(ask, QueryDB.dirPrefix, count = false, ln, field, "")
+          dbSearch.queryValues(ask, QueryDB.dirPrefix, count = true, ln, field, "")
         }
       }
     }
diff --git a/src/test/scala/TestQueryDB.scala b/src/test/scala/TestQueryDB.scala
index 37a62ccdbe0d65f6f669f427b129bafa23f91ae6..7e0a7541ab1786a1dc80067f3467d2b6bd85efb6 100644
--- a/src/test/scala/TestQueryDB.scala
+++ b/src/test/scala/TestQueryDB.scala
@@ -7,8 +7,8 @@ object TestQueryDB {
     context.addRoutes(dbSearch)
     context.start()
     val dirPrefix = if (dir.endsWith("/")) dir else dir + "/"
-    dbSearch.queryValues(true, dirPrefix, false, "skipped", "shortMsg")
-    dbSearch.queryValues(true, dirPrefix, false, "", "errType")
-    dbSearch.queryValues(true, dirPrefix, true, "LocalError", "errType")
+    dbSearch.queryValues(true, dirPrefix, false, "skipped", "shortMsg", "")
+    dbSearch.queryValues(true, dirPrefix, true, "", "errType", "shortMsg")
+    dbSearch.queryValues(true, dirPrefix, true, "LocalError", "errType", "")
   }
 }