我正在尝试计算返回表中的最大值,以及该表中的其他值。但是,我正在为其执行此操作的表不是“真实”表,它是由子查询生成的表。这给我带来了问题,因为我不认为我可以加入它两次,而不重新指定整个子查询。
我目前有一个 SQL Server 解决方案,使用ROW_NUMBER() OVER (PARTITION BY providerId ORDER BY partnershipSetScore DESC) rnk
,但如果可能的话,我正在寻找一个与 DBMS 无关的版本,因为项目的单元测试在没有此功能的 Sqlite DB 中运行。
这是架构和我的 SQL Server 特定查询,以防它们有用:
课程:
- 内部编号
- varchar 名称
- 诠释学校ID
学校:
- 内部编号
- varchar 名称
合伙:
- 内部编号
- varchar 合伙人名称
学校合作:
- 内部编号
- 诠释学校ID
- 内部伙伴关系 ID
这是查询:
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
如果您需要有关我要实现的目标的更多信息,请参阅针对大量数据的自定义排序算法:此查询将是较大查询的子查询,该查询通过最合适的合作伙伴对学校进行排序。