2012-11-07 15 views
6

Tôi đã thấy câu trả lời từ bài đăng trước, hoạt động tốt nhưng tôi có một tình huống khó xử nhỏ. Thực hiện cùng một trường hợp:Chế độ tính toán trong SQL


Bảng liệt kê điểm số của mỗi lớp. Tôi muốn có một tập kết quả trông giống như:

BIO...B 
CHEM...C 


Trường hợp "B" và "C" là các phương thức cho lớp và muốn để có được chế độ cho lớp.

Khi tôi áp dụng các truy vấn dưới đây, tôi đã nhận ra sau đây:

Class | Score | Freq | Ranking 
2010 | B | 8  | 1 
2010 | C | 8  | 1 
2011 | A | 10 | 1 
2012 | B | 11 | 1 

Năm 2010, tôi có hai lớp với cùng một tần số. Nếu tôi chỉ muốn hiển thị số điểm cao nhất, trong trường hợp này sẽ là "B". Làm thế nào tôi có thể đạt được điều đó? Tôi sẽ cần phải chỉ định thứ hạng cho các điểm chữ, nhưng tôi không chắc chắn làm thế nào. Xin cho biết. Cảm ơn.

bài Trước: SQL Server mode SQL

Truy vấn tôi sử dụng để lấy dữ liệu là câu trả lời từ Peter:

;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 

Trả lời

5

Thay đổi:

SELECT * FROM Ranked WHERE Ranking = 1 

Để:

SELECT Class, MIN(Grade) AS HighestGrade, Freq, Ranking 
FROM Ranked 
WHERE Ranking = 1 
GROUP BY Class, Freq, Ranking 
+0

ok, tôi đã thay đổi. Nó hoạt động tốt. Tôi chỉ đang cố gắng tiêu hóa việc sử dụng hàm MIN trong truy vấn này. Cảm ơn. – Frida

+0

Lý do MIN() hoạt động là vì các lớp 'cao hơn' xảy ra sớm hơn trong bảng chữ cái. Vì bạn muốn trở lại lớp tốt hơn khi hai được gắn cho chế độ, tìm kiếm một gần hơn với sự bắt đầu của bảng chữ cái, thông qua các chức năng min, giúp làm cho điều này xảy ra. – zipppy