私は最近、Squeryl ORMの評価を開始しました。これは素晴らしいように見えますが、最終的に、Squeryl で「構築」するのに問題があると思われる SQL クエリにたどり着きました。
すべての製品の平均数量よりも多い数量を持つすべての製品を入手したいと考えています。SQL では、これは次のようになります。
SELECT * FROM product p WHERE p.quantity > (SELECT AVG(quantity) FROM product)
Squeryl が をサポートしておりin()
、-clause サブクエリでサポートしていることは既にわかっています。しかし、Squeryl は集計もサポートしているため、次のようなことが可能になることを願っていました。exists()
notExists()
where
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つのクエリでそれを行うことはできますが(最初に平均数量を取得してから2番目のクエリで使用します)、サブクエリを含む1つのクエリでそれを行うことができるかどうか疑問に思っています.
これは Squeryl では不可能ですか、それとも何か足りないのでしょうか?
これが可能かどうか、また可能であれば、その方法を教えていただければ幸いです。
ありがとう、
セバスチャン