【问题标题】:Aliasing count() for several columns in a group by query in Exposed通过 Exposed 中的查询为组中的多个列别名 count()
【发布时间】:2021-07-27 05:55:37
【问题描述】:

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

你有什么想法吗?

【问题讨论】:

    标签: kotlin kotlin-exposed


    【解决方案1】:
    val count = Count(stringLiteral("*"))
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-18
      • 2022-08-06
      • 2014-06-08
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多