Всегда получайте максимальное значение каждого пользователя на SQL сервере - PullRequest
1 голос
/ 25 мая 2020

Я делаю несколько школьных заданий, но на этом я застреваю. Нам нужно получить наиболее используемый язык каждого пользователя. (Правый столбец «Gebruikt» означает «использованный». Это задание на голландском языке, поэтому мне нужно сделать это на голландском языке). Все работает, но мне нужен только один результат Irwin, но я не могу заставить его работать.

Код vvvv

SELECT [Profile].ProfileName, Language.Name as 'Language', COUNT(*) as 'Gebruikt'
FROM (((Profile
INNER JOIN WatchedMedia ON [WatchedMedia].ProfileID = Profile.ProfileID)
INNER JOIN Subtitles ON [WatchedMedia].SubtitleID = Subtitles.SubtitleID)
INNER JOIN Language ON Language.LanguageID = Subtitles.LanguageID )
WHERE  Language.Name <> Profile.Language
GROUP BY Profile.ProfileName, WatchedMedia.ProfileID, Language.Name
ORDER BY  COUNT(*) DESC
GO

vvvv Результат кода vvvv

enter image description here

1 Ответ

1 голос
/ 25 мая 2020

Вы можете сделать это с помощью ROW_NUMBER() оконной функции:

SELECT t.ProfileName, t.Language, t.Gebruikt
FROM (
  SELECT 
    [Profile].ProfileName, Language.Name as Language, COUNT(*) as Gebruikt,
    ROW_NUMBER() OVER (PARTITION BY [Profile].ProfileName ORDER BY COUNT(*) DESC) rn    
  FROM Profile
  INNER JOIN WatchedMedia ON [WatchedMedia].ProfileID = Profile.ProfileID
  INNER JOIN Subtitles ON [WatchedMedia].SubtitleID = Subtitles.SubtitleID
  INNER JOIN Language ON Language.LanguageID = Subtitles.LanguageID 
  WHERE  Language.Name <> Profile.Language
  GROUP BY Profile.ProfileName, WatchedMedia.ProfileID, Language.Name
) t
WHERE t.rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...