Я пытаюсь вычислить возвращаемое максимальное значение в таблице вместе с другими значениями в этой таблице. Однако таблица, в которой я делаю это, не является «реальной» таблицей, она генерируется подзапросом. Это дает мне проблемы, так как я не думаю, что могу присоединиться к нему дважды, не отменяя весь подзапрос.Groupwise MAX() в подзапросе
В настоящее время у меня есть решение SQL Server для этого, используя ROW_NUMBER() OVER (PARTITION BY providerId ORDER BY partnershipSetScore DESC) rnk
, но я ищу агномическую версию СУБД, если это возможно, поскольку модульные тесты для проекта выполняются в Sqlite DB, который не имеет этой функции.
Вот схема и мой SQL Server конкретный запрос, в случае, если они полезны:
курс:
- INT Идентификатор
- имя VARCHAR
- INT schoolId
Школа:
- INT Идентификатор
- имя VARCHAR
Partnership:
- INT Идентификатор
- VARCHAR partnershipName
SchoolPartnership:
- INT Идентификатор
- 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
Если вам нужна дополнительная информация о том, что я m, котор нужно достигнуть, см. Custom sorting algorithm for a large amount of data: Этот запрос будет подзапросом большего запроса, который выполняет сортировку школ по наиболее подходящему партнерству.
Спасибо, это было бы идеально, но, к сожалению, Sqlite не поддерживает CTE. – ChrisC
@ChrisC. , , Когда я ответил на этот вопрос, он не был помечен SQLite. Почему он помечен двумя базами данных? –
Он был отредактирован кем-то. Редактирование в порядке, исходный вопрос объясняет, почему: У меня в настоящее время есть специальный запрос SQL Server, который мне нужно скрывать, поэтому он работает как в SQL Server, так и в SQLite. – ChrisC