sql >> データベース >  >> RDS >> Mysql

ランク、ユーザー名、ユーザーレコード数を取得するビューを作成します

    あなたは正しい方向に進んでいました。小さな変更を加える必要があります。次のクエリにより、目的の結果が得られます。内部クエリで最初の4列を取得し、ランクをクロス結合して(SELECT @curRank := 0) r これは、ランクを取得するためのMySQLのトリックです。結局、それを機能させるためにCntによって注文する必要がありました。

    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
    

    ビューに表示するには、 @Gordon-Linoff で説明されているハックを使用できます。 この質問では

    終了コードは次のようになります。

    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 定義した最初の4列を取得するために使用されます。 TestView2 最初のビューからすべてを選択し、選択した値がそのビューの最初のインスタンスの値よ​​りも大きいか小さいかを確認する列を追加するだけです。



    1. Railsモデルで複数のPostgreSQLスキーマを使用する

    2. Flexを使用してMySqlDBを更新する方法

    3. pg_dumpとユーザーはsuperadminとラージオブジェクトを使用しないでください

    4. MySQL Workbenchで複数のSQLクエリを実行する方法は?