mysql查询排名
2014-05-18 23:17
281 查看
测试如下:
mysql> select * from animals_inno;
+--------+----+------------+---------------------+----------+
| grp | id | name | created | modified |
+--------+----+------------+---------------------+----------+
| mammal | 1 | dog | 0000-00-00 00:00:00 | NULL |
| mammal | 2 | cat | 0000-00-00 00:00:00 | NULL |
| bird | 3 | penguin | 0000-00-00 00:00:00 | NULL |
| fish | 4 | lax | 0000-00-00 00:00:00 | NULL |
| mammal | 5 | whale | 0000-00-00 00:00:00 | NULL |
| bird | 6 | ?????????? | 2011-04-13 14:52:48 | NULL |
| bird | 7 | ostrich | 0000-00-00 00:00:00 | NULL |
| fish | 8 | | 0000-00-00 00:00:00 | NULL |
| fish | 9 | NULL | 0000-00-00 00:00:00 | NULL |
+--------+----+------------+---------------------+----------+
9 rows in set (0.00 sec)
我想要按照grp进行排序,grp相同的情况下。我要占位处理:
SELECT grp,
name,
id,
(SELECT COUNT(*) FROM animals_inno where grp < a.grp) + 1 place
FROM animals_inno a
ORDER BY place;
+--------+------------+----+-------+
| grp | name | id | place |
+--------+------------+----+-------+
| bird | penguin | 3 | 1 |
| bird | ?????????? | 6 | 1 |
| bird | ostrich | 7 | 1 |
| fish | lax | 4 | 4 |
| fish | | 8 | 4 |
| fish | NULL | 9 | 4 |
| mammal | dog | 1 | 7 |
| mammal | cat | 2 | 7 |
| mammal | whale | 5 | 7 |
+--------+------------+----+-------+
9 rows in set (0.00 sec)
如果grp相同时我不需要占位,则可以:
select grp,
name,
id,
(select count(distinct grp) from animals_inno where grp < a.grp) + 1 place
from animals_inno a
order by place;
+--------+------------+----+-------+
| grp | name | id | place |
+--------+------------+----+-------+
| bird | penguin | 3 | 1 |
| bird | ?????????? | 6 | 1 |
| bird | ostrich | 7 | 1 |
| fish | lax | 4 | 2 |
| fish | | 8 | 2 |
| fish | NULL | 9 | 2 |
| mammal | dog | 1 | 3 |
| mammal | cat | 2 | 3 |
| mammal | whale | 5 | 3 |
+--------+------------+----+-------+
9 rows in set (0.00 sec)
更多情况下我需要按照grp分组,然后按照id排序后给出每行的排名,
同样,当grp相同需要占位时,可以:
SELECT grp,
name,
id,
(SELECT COUNT(*) FROM animals_inno where grp =a.grp and id< a.id) + 1 place
FROM animals_inno a
ORDER BY grp,place;
+--------+------------+----+-------+
| grp | name | id | place |
+--------+------------+----+-------+
| fish | lax | 4 | 1 |
| fish | | 8 | 2 |
| fish | NULL | 9 | 3 |
| mammal | dog | 1 | 1 |
| mammal | cat | 2 | 2 |
| mammal | whale | 5 | 3 |
| bird | penguin | 3 | 1 |
| bird | ?????????? | 6 | 2 |
| bird | ostrich | 7 | 3 |
+--------+------------+----+-------+
9 rows in set (0.00 sec)
当grp相同不需要占位时,可以:
SELECT grp,
name,
id,
(SELECT COUNT(distinct id) FROM animals_inno where grp =a.grp and id< a.id) + 1 place
FROM animals_inno a
ORDER BY grp,place;
+--------+------------+----+-------+
| grp | name | id | place |
+--------+------------+----+-------+
| fish | lax | 4 | 1 |
| fish | | 8 | 2 |
| fish | NULL | 9 | 3 |
| mammal | dog | 1 | 1 |
| mammal | cat | 2 | 2 |
| mammal | whale | 5 | 3 |
| bird | penguin | 3 | 1 |
| bird | ?????????? | 6 | 2 |
| bird | ostrich | 7 | 3 |
+--------+------------+----+-------+
9 rows in set (0.00 sec)
mysql> select * from animals_inno;
+--------+----+------------+---------------------+----------+
| grp | id | name | created | modified |
+--------+----+------------+---------------------+----------+
| mammal | 1 | dog | 0000-00-00 00:00:00 | NULL |
| mammal | 2 | cat | 0000-00-00 00:00:00 | NULL |
| bird | 3 | penguin | 0000-00-00 00:00:00 | NULL |
| fish | 4 | lax | 0000-00-00 00:00:00 | NULL |
| mammal | 5 | whale | 0000-00-00 00:00:00 | NULL |
| bird | 6 | ?????????? | 2011-04-13 14:52:48 | NULL |
| bird | 7 | ostrich | 0000-00-00 00:00:00 | NULL |
| fish | 8 | | 0000-00-00 00:00:00 | NULL |
| fish | 9 | NULL | 0000-00-00 00:00:00 | NULL |
+--------+----+------------+---------------------+----------+
9 rows in set (0.00 sec)
我想要按照grp进行排序,grp相同的情况下。我要占位处理:
SELECT grp,
name,
id,
(SELECT COUNT(*) FROM animals_inno where grp < a.grp) + 1 place
FROM animals_inno a
ORDER BY place;
+--------+------------+----+-------+
| grp | name | id | place |
+--------+------------+----+-------+
| bird | penguin | 3 | 1 |
| bird | ?????????? | 6 | 1 |
| bird | ostrich | 7 | 1 |
| fish | lax | 4 | 4 |
| fish | | 8 | 4 |
| fish | NULL | 9 | 4 |
| mammal | dog | 1 | 7 |
| mammal | cat | 2 | 7 |
| mammal | whale | 5 | 7 |
+--------+------------+----+-------+
9 rows in set (0.00 sec)
如果grp相同时我不需要占位,则可以:
select grp,
name,
id,
(select count(distinct grp) from animals_inno where grp < a.grp) + 1 place
from animals_inno a
order by place;
+--------+------------+----+-------+
| grp | name | id | place |
+--------+------------+----+-------+
| bird | penguin | 3 | 1 |
| bird | ?????????? | 6 | 1 |
| bird | ostrich | 7 | 1 |
| fish | lax | 4 | 2 |
| fish | | 8 | 2 |
| fish | NULL | 9 | 2 |
| mammal | dog | 1 | 3 |
| mammal | cat | 2 | 3 |
| mammal | whale | 5 | 3 |
+--------+------------+----+-------+
9 rows in set (0.00 sec)
更多情况下我需要按照grp分组,然后按照id排序后给出每行的排名,
同样,当grp相同需要占位时,可以:
SELECT grp,
name,
id,
(SELECT COUNT(*) FROM animals_inno where grp =a.grp and id< a.id) + 1 place
FROM animals_inno a
ORDER BY grp,place;
+--------+------------+----+-------+
| grp | name | id | place |
+--------+------------+----+-------+
| fish | lax | 4 | 1 |
| fish | | 8 | 2 |
| fish | NULL | 9 | 3 |
| mammal | dog | 1 | 1 |
| mammal | cat | 2 | 2 |
| mammal | whale | 5 | 3 |
| bird | penguin | 3 | 1 |
| bird | ?????????? | 6 | 2 |
| bird | ostrich | 7 | 3 |
+--------+------------+----+-------+
9 rows in set (0.00 sec)
当grp相同不需要占位时,可以:
SELECT grp,
name,
id,
(SELECT COUNT(distinct id) FROM animals_inno where grp =a.grp and id< a.id) + 1 place
FROM animals_inno a
ORDER BY grp,place;
+--------+------------+----+-------+
| grp | name | id | place |
+--------+------------+----+-------+
| fish | lax | 4 | 1 |
| fish | | 8 | 2 |
| fish | NULL | 9 | 3 |
| mammal | dog | 1 | 1 |
| mammal | cat | 2 | 2 |
| mammal | whale | 5 | 3 |
| bird | penguin | 3 | 1 |
| bird | ?????????? | 6 | 2 |
| bird | ostrich | 7 | 3 |
+--------+------------+----+-------+
9 rows in set (0.00 sec)
相关文章推荐
- 为 MySQL 的查询结果添加排名字段
- MySql查询排名信息
- Mysql将查询后的数据进行排名的SQL语句
- Mysql 查询实现成绩排名,相同分数名次相同,类似于rank()函数
- mysql查询排名的方法(yii的写法)
- 在MYSQL中 如何查询排名数
- 【MySQL技巧】说一说MySQL中的查询排名
- Mysql 排名查询
- mysql排名(查询篇)
- MySQL 查询排名
- mysql查询排名
- MySQL中给自定义的字段查询结果添加排名的方法
- MySQL中给自定义的字段查询结果添加排名的方法
- mysql:查询排名
- mysql:查询排名
- MYSQL查询语句:根据成绩更新全部排名
- mysql 查询结果增加自动递增的一列,排名,排序
- 整理的一些MySQL中排名查询的语句
- mysql 查询获取排名的方法
- MySQL查询排名