1

我最近开始评估Squeryl ORM,它看起来很棒,但最后我遇到了一个 SQL 查询,它似乎很难用 Squeryl“构建”。

我想获得数量高于所有产品平均数量的所有产品。在 SQL 中,这看起来像

SELECT * FROM product p WHERE p.quantity > (SELECT AVG(quantity) FROM product)

我已经发现 Squeryl 支持in(),exists()notExists()-clausewhere子查询。但由于 Squeryl 也支持avg聚合,我希望这样的事情是可能的:

val avgQuantity = from(products)(p => compute(avg(p.quantity)))
val oftenOccuringProducts = from(products)(p => where(p.quantity gt avgQuantity) select(p))

可悲的是,这引发了:

type mismatch; found : org.squeryl.Query[org.squeryl.dsl.Measures[Option[org.squeryl.PrimitiveTypeMode.FloatType]]] 
required: org.squeryl.dsl.NumericalExpression[?]

当然,我可以在 2 个查询中做到这一点(首先,获取平均数量,然后在第二个查询中使用它)但我想知道是否可以使用一个包含 subquery 的查询来做到这一点。

这对 Squeryl 是不可能的,还是我只是错过了什么?

如果这是可能的,我会很感激任何帮助,如果,如何。

谢谢,

塞巴斯蒂安

4

1 回答 1

1

根据邮件列表的相同讨论,已将修复推送到 Squeryl 主分支,并将包含在下一个版本中。

于 2012-07-03T08:01:05.133 回答