diff --git a/postgresql/result.go b/postgresql/result.go
index e484bf86dad02c4e5b016173dc3b53861db1c684..d1fbc640b95194f26f33bf9c4b3ebd06d7a0ea13 100644
--- a/postgresql/result.go
+++ b/postgresql/result.go
@@ -94,7 +94,21 @@ func (r *result) Group(fields ...interface{}) db.Result {
 	l := len(fields)
 	for i := 0; i < l; i++ {
 		switch value := fields[i].(type) {
-		// Maybe other types?
+		case db.Func:
+			v := interfaceArgs(value.Args)
+			var s string
+			if len(v) == 0 {
+				s = fmt.Sprintf(`%s()`, value.Name)
+			} else {
+				ss := make([]string, 0, len(v))
+				for j := range v {
+					ss = append(ss, fmt.Sprintf(`%v`, v[j]))
+				}
+				s = fmt.Sprintf(`%s(%s)`, value.Name, strings.Join(ss, `, `))
+			}
+			groupByColumns = append(groupByColumns, sqlgen.Column{sqlgen.Raw{s}})
+		case db.Raw:
+			groupByColumns = append(groupByColumns, sqlgen.Column{sqlgen.Raw{fmt.Sprintf("%v", value.Value)}})
 		default:
 			groupByColumns = append(groupByColumns, sqlgen.Column{value})
 		}