Mysql
 sql >> Baza danych >  >> RDS >> Mysql

utwórz widok, który otrzymuje rangę, nazwę użytkownika i liczbę rekordów użytkowników

Byłeś na dobrej drodze. Wystarczyło dokonać drobnych zmian. Poniższe zapytanie da Ci pożądane wyniki. W wewnętrznym zapytaniu otrzymałem pierwsze 4 kolumny i aby uzyskać rangę krzyżowo połączono je z (SELECT @curRank := 0) r co jest sztuczką MySQL do uzyskania rangi. w końcu wystarczyło zamówić przez Cnt, aby działało.

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

Aby umieścić go w widoku, możesz użyć hacka opisanego przez @Gordon-Linoff w tym pytaniu

Kod końcowy będzie wyglądał mniej więcej tak.

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 służy do pobrania pierwszych 4 zdefiniowanych kolumn. TestView2 po prostu wybierasz wszystko z pierwszego widoku, a następnie dodajesz kolumnę, która sprawdza, czy wybrana wartość jest większa lub mniejsza niż wartość w pierwszym wystąpieniu tego widoku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WYBIERZ wiersze z minimalną liczbą (*)

  2. Grupa MySQL od kwartałów do okresów

  3. Słowo kluczowe LIMIT na MySQL z przygotowaną instrukcją

  4. Wstaw dużą ilość zmiennych do tabeli za pomocą PDO

  5. JPA Hibernate - kaskadowe usuwanie zarówno w bazie danych, jak i adnotacji