通过 Exposed 中的查询为一组中的多个列别名计数()

Aliasing count() for several columns in a group by query in Exposed

我正在尝试创建一个类似于 ORM Exposed 中提供的查询。

select t.a, t.b, count(*)
from table as t
group by t.a, t.b;

但是.count()好像只支持一列的别名,但是这里我需要两列:

val count = Table.Table.<somehow I need to push both fields a and b here>.count()

Table.Table
  .slice(Table.Table.a, Table.Table.b, count)
  .selectAll()
  .groupBy(Table.Table.a, Table.Table.b)
  .map { row ->
   Result(
     state = row[Table.Table.a],
     trigger = row[Table.Table.b],
     count = row[count]
   )
  }

你有什么想法吗?

val count = Count(stringLiteral("*"))

这将在您的查询中生成 COUNT('*')(这是一个有效的 SQL 表达式,给出与 COUNT(*) 相同的结果)。

如果你想摆脱这些烦人的引号,你可以这样做:

val asterisk = object : Expression<String>() {
    override fun toQueryBuilder(queryBuilder: QueryBuilder) {
        queryBuilder { +"*" }
    }
}
val count = Count(asterisk)