我試圖計算返回表中的最大值,以及該表中的其他值。然而,我這樣做的表不是一個「真正的」表,它是由子查詢生成的。這給我帶來了問題,因爲我不認爲我可以加入它兩次,而無需重新指定整個子查詢。子查詢上的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