Bạn đã đi đúng hướng. Chỉ cần thực hiện những thay đổi nhỏ. Truy vấn sau đây sẽ cung cấp cho bạn kết quả mong muốn. Trong truy vấn bên trong, có 4 cột đầu tiên và để có được xếp hạng chéo, hãy nối nó thành (SELECT @curRank := 0) r
đó là thủ thuật MySQL để tăng thứ hạng. cuối cùng chỉ cần Cnt đặt hàng để làm cho nó hoạt động.
SELECT username
,userid
,category
,Cnt
,@curRank := @curRank + 1 AS rank
FROM (
SELECT b.Username
,B.userid
,A.category
,count(*) Cnt
FROM tblb B
JOIN tbla A
ON B.UserID = A.User
WHERE a.Category = 1
GROUP BY b.username
)a
,(SELECT @curRank := 0) r
Order by cnt desc
Để đưa nó vào Chế độ xem, bạn có thể sử dụng hack được mô tả bởi @ Gordon-Linoff trong câu hỏi này
Mã kết thúc sẽ giống như thế này.
CREATE VIEW TestView1
AS
SELECT b.Username
,B.userid
,A.category
,COUNT(*) Cnt
FROM tblb B
JOIN tbla A
ON B.UserID = A.User
WHERE a.Category = 1
GROUP BY b.username
ORDER BY cnt DESC;
CREATE VIEW TestView2
AS
SELECT t1.*
,( SELECT 1 + COUNT(*)
FROM TestView1 AS t2
WHERE t2.Cnt > t1.Cnt
OR (
t2.Cnt = t1.Cnt
AND t2.userid < t1.userid ) ) AS Rank
FROM TestView1 AS t1
TestView1
được sử dụng để lấy 4 cột đầu tiên mà bạn đã xác định. TestView2
bạn chỉ cần chọn mọi thứ từ chế độ xem đầu tiên và thêm cột kiểm tra xem giá trị bạn chọn lớn hơn hay nhỏ hơn giá trị trong trường hợp đầu tiên của chế độ xem đó.