テーブル内の他の値と一緒に、テーブル内の最大値を返すように計算しようとしています。ただし、これを実行しているテーブルは「実際の」テーブルではなく、サブクエリによって生成されたテーブルです。サブクエリ全体を再指定せずに2回参加することはできないと思うので、これは私に問題を与えます。
私は現在、を使用してこれに対するSQL Serverソリューションを持っていますROW_NUMBER() OVER (PARTITION BY providerId ORDER BY partnershipSetScore DESC) rnk
が、この機能を持たないSqlite DBで実行されるプロジェクトの単体テストとして、可能であればDBMSに依存しないバージョンを探しています。
役立つ場合に備えて、スキーマとSQLServer固有のクエリを次に示します。
コース:
- int id
- varchar名
- int schoolId
学校:
- int id
- varchar名
パートナーシップ:
- int id
- varcharpartnershipName
SchoolPartnership:
- int id
- int schoolId
- intpartnershipId
クエリは次のとおりです。
SELECT
schoolId,
partnershipId AS bestPartnershipSetId,
partnershipScore AS bestPartnershipScore
FROM
(
SELECT
pp.schoolId,
partnershipScores.partnershipId,
partnershipScores.partnershipScore,
ROW_NUMBER() OVER (PARTITION BY schoolId ORDER BY partnershipScore DESC) rnk
FROM schoolPartnership pp
INNER JOIN (
SELECT
pp.partnershipId,
(
(CASE WHEN SUM(CASE WHEN c.name LIKE '%French%' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END)
+ (CASE WHEN SUM(CASE WHEN c.name LIKE '%History%' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END)
) AS partnershipScore
FROM schoolPartnership pp
INNER JOIN course c ON c.schoolId = pp.schoolId
GROUP BY partnershipId
) AS partnershipScores ON partnershipScores.partnershipId = pp.partnershipId
) AS schoolPartnershipScores
WHERE rnk = 1
私が達成しようとしていることについてさらに情報が必要な場合は、大量のデータのカスタム並べ替えアルゴリズムを参照してください。このクエリは、最適なパートナーシップによる学校の並べ替えを実行する、より大きなクエリのサブクエリになります。