根据计数num对用户进行排名

时间:2014-02-19 13:58:24

标签: mysql sql

如何根据列数来对用户进行排名,列数是用户在表中存在的次数的计数。如果2个用户具有相同的计数,则应该给予最高等级以下的用户,例如:用户1和2具有计数3然后,用户1是等级1,用户2是等级3,如果有新用户3有计数1,则用户3是等级3。

我该怎么做?我真的很感激任何帮助。谢谢你。

http://sqlfiddle.com/#!2/a9188/2

CREATE TABLE if not exists tblA
(
id int(11) NOT NULL auto_increment ,
user varchar(255),
 category int(255),
 PRIMARY KEY (id)
);


INSERT INTO tblA (user, category ) VALUES
('1', '1'),
('1', '2'),
('1', '3'),
('1', '1'),
('2', '1'),
('2', '1'),
('2', '1'),
('2', '1'),
('3', '1'),
('2', '1');

响应如下:搜索“1”

的类别
user  category    count    rank

1       1         2        1
2       1         2        2

使用的查询:

SELECT USER,
       category,
       count(*) AS num
FROM tblA
WHERE category=1
GROUP BY USER,
         category
ORDER BY num DESC;

1 个答案:

答案 0 :(得分:2)

例如,使用子查询:

SELECT
  groups.*,
  @rank:=@rank+1 AS rank
FROM
  (select 
    user,
    category,
    count(*) as num
  from 
    tblA
  where 
    category=1 
  group by 
    user, 
    category
  order by 
    num desc,
    user) AS groups
  CROSS JOIN (SELECT @rank:=0) AS init

- 检查修改后的demo