如何在 HAVING 子句中使用别名?

How can I use an alias with HAVING clause?

我正在尝试将 JPQL 等同于以下 SQL。

SELECT last_name, COUNT(1) AS c
FROM actor
GROUP BY last_name
HAVING c > 1
ORDER BY c DESC

我尝试使用以下 JPQL。

SELECT e.lastName, COUNT(e.lastName) AS c
FROM Actor
GROUP BY e.lastName
HAVING c > 1
ORDER BY c DESC

并且 Hibernate 生成以下 SQL 并抱怨。

    select
        actor0_.last_name as col_0_0_,
        count(actor0_.last_name) as col_1_0_ 
    from
        actor actor0_ 
    group by
        actor0_.last_name 
    having
        c>=? 
    order by
        col_1_0_ DESC limit ?

当我像这样更改 JPQL 时,它起作用了。

SELECT e.lastName, COUNT(e.lastName) AS c
FROM Actor
GROUP BY e.lastName
HAVING COUNT(e.lastName) > 1
ORDER BY c DESC

如何在 HAVING 子句中使用名为 c 的别名?

如果我就是不行,查询可以吗?有什么最佳方法吗?

谢谢。

JPQL 不支持在 HAVING 子句中使用别名,主要是因为并非所有 SQL 引擎都支持此行为。例如,Oracle 和 Postgres 都不支持您的第一个查询版本。

如果您想使用纯 JPQL,那么只需在 HAVING 子句中重复整个计数表达式即可。如果你真的想在 HAVING 子句中重用别名,那么让你的查询成为本机查询,假设 MySQL 是基础数据库,它将 运行 没有任何问题。