diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 5b2d1d7636..90cca5395b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -17376,6 +17376,14 @@ public class DSL { return new org.jooq.impl.Function("avg", true, SQLDataType.NUMERIC, nullSafe(field)); } + /** + * The mode(field) aggregate function. + */ + @Support({ POSTGRES_9_4 }) + public static AggregateFunction mode(Field field) { + return new org.jooq.impl.Function(Term.MODE, nullSafeDataType(field), field); + } + /** * Get the median over a numeric field: median(field). */ diff --git a/jOOQ/src/main/java/org/jooq/impl/Function.java b/jOOQ/src/main/java/org/jooq/impl/Function.java index acb677b476..fa0155d66f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Function.java +++ b/jOOQ/src/main/java/org/jooq/impl/Function.java @@ -53,6 +53,7 @@ import static org.jooq.SQLDialect.POSTGRES_9_4; import static org.jooq.SQLDialect.SQLITE; // ... import static org.jooq.impl.DSL.condition; +import static org.jooq.impl.DSL.mode; import static org.jooq.impl.DSL.name; import static org.jooq.impl.DSL.one; import static org.jooq.impl.DSL.percentileCont; @@ -76,6 +77,7 @@ import static org.jooq.impl.SelectQueryImpl.SUPPORT_WINDOW_CLAUSE; import static org.jooq.impl.Term.ARRAY_AGG; import static org.jooq.impl.Term.LIST_AGG; import static org.jooq.impl.Term.MEDIAN; +import static org.jooq.impl.Term.MODE; import static org.jooq.impl.Term.ROW_NUMBER; import static org.jooq.impl.Tools.DataKey.DATA_WINDOW_DEFINITIONS; @@ -225,6 +227,9 @@ class Function extends AbstractField implements + else if (term == MODE && ( ctx.family() == POSTGRES)) { + ctx.visit(mode().withinGroupOrderBy(DSL.field("{0}", arguments.get(0)))); + } else if (term == MEDIAN && ( ctx.family() == POSTGRES)) { Field[] fields = new Field[arguments.size()]; for (int i = 0; i < fields.length; i++) diff --git a/jOOQ/src/main/java/org/jooq/impl/Term.java b/jOOQ/src/main/java/org/jooq/impl/Term.java index b1dfc163d6..1db6e268b0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Term.java +++ b/jOOQ/src/main/java/org/jooq/impl/Term.java @@ -174,6 +174,19 @@ enum Term { return "median"; } }, + MODE { + @Override + public String translate(SQLDialect dialect) { + switch (dialect.family()) { + + + + + default: + return "mode"; + } + } + }, OCTET_LENGTH { @Override public String translate(SQLDialect dialect) {