我最近开始评估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 是不可能的,还是我只是错过了什么?
如果这是可能的,我会很感激任何帮助,如果,如何。
谢谢,
塞巴斯蒂安