【发布时间】:2013-02-12 20:48:31
【问题描述】:
我正在尝试计算返回表中的最大值以及该表中的其他值。但是,我正在为其执行此操作的表不是“真实”表,它是由子查询生成的表。这给我带来了问题,因为我不认为我可以加入它两次,而不重新指定整个子查询。
我目前有一个使用ROW_NUMBER() OVER (PARTITION BY providerId ORDER BY partnershipSetScore DESC) rnk 的SQL Server 解决方案,但如果可能的话,我正在寻找一个与DBMS 无关的版本,因为项目的单元测试在没有此功能的Sqlite DB 中运行。
这是架构和我的 SQL Server 特定查询,以防它们有用:
课程:
- int id
- varchar 名称
- int schoolId
学校:
- int id
- varchar 名称
合作伙伴关系:
- int id
- varchar 伙伴关系名称
学校合作伙伴关系:
- int id
- int schoolId
- int合作伙伴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
如果您需要有关我想要实现的目标的更多信息,请参阅Custom sorting algorithm for a large amount of data:此查询将是一个更大查询的子查询,该查询按最合适的合作伙伴对学校进行排序。
【问题讨论】:
标签: sql sql-server sqlite