状态下对计算列进行过滤

状态下对计算列进行过滤

假设我有一个包含X和Y两列的表格。
我想通过休眠运行以下查询:

SELECT X*X + Y*Y AS Distance, POINTS.* from POINTS
WHERE X > 0
AND Y > 0
HAVING Distance < 50


如何通过休眠实现它?您可以提供代码示例吗?

编辑-This question似乎密切相关。我不关闭此副本的唯一原因是因为它提供了更为简单的用例(没有GROUP BY)。

最佳答案

在大多数SQL方言中,您不能使用“显示标签”或“ AS名称”中的名称来引用查询主体内部的表达式,这在很大程度上让人感到cha恼。但是,您可以在WHERE子句中使用该表达式。

SELECT X*X + Y*Y AS DistanceSquared, POINTS.* from POINTS
 WHERE X > 0
   AND Y > 0
   AND (X * X + Y * Y) < 50;


HAVING子句与聚合和聚合比较相关联:

SELECT name, COUNT(*)
  FROM SomeWhere
 GROUP BY Name
HAVING COUNT(*) > 1;


HAVING子句中的条件必须(应该)涉及至少一个“直接”聚合;条件中的另一项可能是常量(如图所示)或另一个直接聚合,或者是子查询,可能涉及“间接”聚合。 (AFAIK,我已经为此答案发明了“直接/间接”术语-您可能无法有效地搜索该表达式。)

关于java - 在 hibernate 状态下对计算列进行过滤? (有),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4290850/

10-11 10:42