通过 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)
我正在尝试创建一个类似于 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)