我试图计算返回表中的最大值,以及该表中的其他值。然而,我这样做的表不是一个“真正的”表,它是由子查询生成的。这给我带来了问题,因为我不认为我可以加入它两次,而无需重新指定整个子查询。子查询上的Groupwise MAX()
我目前有一个SQL Server的解决方案,使用ROW_NUMBER() OVER (PARTITION BY providerId ORDER BY partnershipSetScore DESC) rnk
,但我正在寻找一个DBMS不可知的版本,如果可能的话,因为单元测试的项目运行在没有这个功能的Sqlite DB中。
这里的架构和我的SQL Server特定的查询,如果他们是有用的:
课程:
- INT ID
- VARCHAR名
- INT schoolId
派息:
- INT ID
- VARCHAR名
合作伙伴:
- INT ID
- VARCHAR partnershipName
SchoolPartnership:
- INT ID
- INT schoolId
- INT partnershipId
这里的查询:
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:该查询将是一个较大查询的子查询,通过最合适的伙伴关系对学校进行排序。
谢谢,这将是理想的,但不幸的是Sqlite不支持CTE。 – ChrisC 2013-02-12 23:11:27
@ChrisC。 。 。当我回答这个问题时,它没有被标记为SQLite。为什么它使用两个数据库进行标记? – 2013-02-13 04:42:53
它由某人编辑。编辑很好,原始问题解释了为什么:我目前有一个SQL Server特定的查询,我需要隐藏它,因此它在SQL Server和SQLite中都可以工作。 – ChrisC 2013-02-13 07:51:18