私は基本的に、NHibernate ICriteria インターフェイスを使用してこのクエリを作成しようとしています。
SomeTable 1:n AnotherTable
SomeTableには列があります: PrimaryKey、NonAggregateColumn
AnotherTableには列があります: PrimaryKey、ForeignKey、AnotherNonAggregate、YetAnotherNonAggregate
SELECT
table1.NonAggregateColumn,
subquery.SubQueryAggregate1,
subquery.SubQueryAggregate2
FROM
SomeTable AS table1
LEFT JOIN
(
SELECT
table2.ForeignKey,
COUNT(table2.AnotherNonAggregate) AS SubQueryAggregate1,
AVG(table2.YetAnotherNonAggregate) AS SubQueryAggregate2
FROM AnotherTable AS table2
GROUP BY (table2.ForeignKey)
) AS subquery ON subquery.ForeignKey = table1.PrimaryKey
SQL はテーブルを 2 回スキャンする必要があるため (集計ごとに 1 つの射影サブクエリ)、射影サブクエリの使用があまり効率的でないことは明らかです。
複数の GROUP BY を使用することも効率的ではありません。
これに対する解決策はありますか?これまでのところ、生の SQL を使用することに頼ってきましたが、これは複雑なレポートでは扱いにくくなっています。