Mysql
 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

За да го поставите във View, можете да използвате хак, описан от @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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранение на голям JSON - двоичен или текстов

  2. SQL заявка за извличане на редове, където дадена стойност присъства в поле, разделено със запетая

  3. MYSQL - ИЗБЕРЕТЕ IP v4/v6, inet_pton &bin2hex

  4. Rails + MySQL на Mavericks - Библиотеката не е заредена:libmysqlclient.18.dylib

  5. Масиви от множество форми за качване, качване на изображения и след това вмъкване в база данни (PHP, MySQL)