这太有趣了。据我所知,这在 SQL 中是不可能的。SQL:2008 标准规定
10.9 <aggregate function>
Format
<aggregate function> ::=
COUNT <left paren> <asterisk> <right paren> [ <filter clause> ]
| <general set function> [ <filter clause> ]
<general set function> ::=
<set function type> <left paren> [ <set quantifier> ]
<value expression> <right paren>
逗号分隔的参数列表没有空间,不管有没有DISTINCT
集合量词。这在 Oracle 中正确实现:
然而,MySQL 似乎允许这种非标准的“方便语法”:
COUNT(DISTINCT expr,[expr...])
返回具有不同非 NULL expr 值的行数。
(取自http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html#function_count)。
要回答您的问题,这在 jOOQ 中目前是不可能的,尽管我提交了#1728以供将来支持。目前,您可以通过编写自己的多参数聚合函数支持来解决此问题:
Field<Integer> myCount = Factory.field(
"count(distinct {0}, {1})", Integer.class, c2, c3);
Factory.field(String, Class<T>, QueryPart...)
具体方法见相关Javadoc
这现在在 jOOQ 2.6 中实现:
你可以写
Field<Integer> count = Factory.countDistinct(c2, c3);
有关详细信息,请参阅该Factory.countDistinct(Field...)
方法的 Javadoc