我最近开始评估Squeryl ORM并且它看起来很棒,但最后我找到了一个SQL查询,似乎与Squeryl“构建”有问题。
我希望所有产品的数量都高于所有产品的平均数量。 在SQL中,这看起来像
SELECT * FROM product p WHERE p.quantity > (SELECT AVG(quantity) FROM product)
我已经发现Squeryl在in()
- 子句子查询中支持exists()
,notExists()
和where
。但由于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个查询中执行此操作(首先,获取平均数量,然后在第二个查询中使用它)但我想知道是否可以使用一个查询执行包括子查询。
这对Squeryl来说是不可能的,还是我错过了什么?
如果有可能,我会感激任何帮助,如果,如何。
谢谢,
塞巴斯蒂安