Widziałem odpowiedź z poprzedniego postu, który działa dobrze, ale mam mały dylemat. W tym samym scenariuszu:Tryb obliczania w SQL
Tabela z listą ocen uczniów w klasie. Chcę zestaw wyników, która wygląda tak:
BIO...B
CHEM...C
gdzie „B” i „C” są tryby dla klasy i chcesz uzyskać tryb dla klasy.
Kiedyś zastosowano poniższe zapytanie, mam następujący wynik:
Class | Score | Freq | Ranking
2010 | B | 8 | 1
2010 | C | 8 | 1
2011 | A | 10 | 1
2012 | B | 11 | 1
W 2010 roku, mam dwie klasy z taką samą częstotliwością. Co jeśli ... Po prostu chcę wyświetlić najwyższy wynik, w tym przypadku będzie to "B". Jak mogę to osiągnąć? Musiałbym przypisać rankingi do ocen literowych, ale nie jestem pewien jak. Proszę doradź. Dzięki.
Przed postu: SQL Server mode SQL
Zapytanie kiedyś odzyskać dane była odpowiedź od Piotra:
;WITH Ranked AS (
SELECT
ClassName, Grade
, GradeFreq = COUNT(*)
, Ranking = DENSE_RANK() OVER (PARTITION BY ClassName ORDER BY COUNT(*) DESC)
FROM Scores
GROUP BY ClassName, Grade
)
SELECT * FROM Ranked WHERE Ranking = 1
ok, dokonałem zmiany. To działa dobrze. Po prostu próbuję przetrawić użycie funkcji MIN w tym zapytaniu. Dzięki. – Frida
Powodem, dla którego działa funkcja MIN(), jest fakt, że "wyższe" stopnie występują wcześniej w alfabecie. Ponieważ chcesz zwrócić lepszą ocenę, gdy dwa są powiązane z trybem, znalezienie tego bliżej początku alfabetu, za pomocą funkcji min, pomaga to osiągnąć. – zipppy