Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

crie uma visualização que obtenha classificação, nome de usuário e contagem de registros de usuários


Você estava no caminho certo. Só precisava fazer pequenas alterações. A consulta a seguir fornecerá os resultados desejados. Na consulta interna, obtive as primeiras 4 colunas e, para obter a classificação, juntei-a a (SELECT @curRank := 0) r que é o truque do MySQL para obter classificação. no final só faltava encomendar pelo Cnt para que funcionasse.
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

Para colocá-lo no View, você pode usar o hack descrito por @Gordon-Linoff nesta pergunta

O código final será algo assim.
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 é usado para obter as primeiras 4 colunas que você definiu. TestView2 você apenas seleciona tudo da primeira exibição e adiciona uma coluna que verifica se o valor que você seleciona é maior ou menor que o valor na primeira instância dessa exibição.