sql >> Databasteknik >  >> RDS >> Mysql

skapa en vy som får rang, användarnamn och antal användarposter

Du var på rätt spår. Behövde bara göra mindre ändringar. Följande fråga ger dig de önskade resultaten. I den inre frågan fick de första 4 kolumnerna och för att få rangordnade kors förenade det till (SELECT @curRank := 0) r vilket är ett MySQL-trick för att få ranking. i slutändan behövde bara beställa av Cnt för att få det att fungera.

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

För att lägga till det i View kan du använda hack som beskrivs av @Gordon-Linoff i den här frågan

Slutkoden kommer att se ut ungefär så här.

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 används för att få första 4 kolumner som du definierat. TestView2 du väljer bara allt från den första vyn och lägger sedan till en kolumn som kontrollerar om värdet du väljer är större eller mindre än värdet i första instans av den vyn.



  1. Hur kan jag skapa ett unikt index i Oracle men ignorera nollvärden?

  2. Planering av diskutrymme för databaser

  3. Hur lägger man till främmande nyckel i SQL?

  4. Infoga variabler MySQL med Python, fungerar inte