sql >> Database teknologi >  >> RDS >> Mysql

oprette en visning, som får rang, brugernavn og antal brugerregistreringer

Du var på rette vej. Mangler bare at lave mindre ændringer. Følgende forespørgsel vil give dig de ønskede resultater. I indre forespørgsel fik de første 4 kolonner og for at få rangkryds sammenføjede det til (SELECT @curRank := 0) r hvilket er MySQL trick til at få rang. til sidst skulle man bare bestille af Cnt for at få det til at virke.

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

For at sætte det i View kan du bruge hack beskrevet af @Gordon-Linoff i dette spørgsmål

Slutkoden vil se nogenlunde sådan ud.

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 bruges til at få de første 4 kolonner, som du har defineret. TestView2 du vælger bare alt fra første visning og tilføjer derefter kolonne, der kontrollerer, om den værdi, du vælger, er ether større eller mindre end værdien i første instans af den visning.



  1. At slutte sig til et bord for sig selv i Oracle

  2. Tilslutning til MySQL-databaser

  3. Vælg Bulk Collect into Oracle Eksempel

  4. Valg af en kolonne, der også er et nøgleord i MySQL