Mysql:实现row_number分组排序功能
(2015-09-17 11:27:57)
标签:
mysqlrow_numberrownum |
分类: DateBase |
Mysql:实现row_number分组排序功能
在sql server 和 oracle 中均有row_number 实现功能,即对查询结果进行分组排序添加字段。而在mysql中无内置函数,需要曲线救国。
表结构:
CREATE TABLE `total_freq_ctrl` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1、通过内表连接进行对应字段大小计数方式判断该条记录所处的row_number
SELECT machine, deny_flow, total_flow, time
FROM total_freq_ctrl A
WHERE ( SELECT COUNT(machine)
ORDER BY A.time desc;
2、引入@rownum 将表内数据添加序列号
set @row=0;
SELECT module, machine, time, @row:=@row+1 rownum
FROM total_freq_ctrl
order by module,machine,time desc
limit 10;
结果展示:
+--------+---------------+------------+--------+
| module |
machine
+--------+---------------+------------+--------+
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
+--------+---------------+------------+--------+
3、添加@mid来进行分组,按mid进行分组添加rownum
set @row=0;
set @mid='';
SELECT module, machine, time,
FROM total_freq_ctrl
order by module,machine,time desc
limit 20;
结果展示:
+--------+---------------+------------+--------+---------------+
| module |
machine
+--------+---------------+------------+--------+---------------+
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
| all
+--------+---------------+------------+--------+---------------+
注:1、Mysql中添加rownum功能,主要是group by变量改变,设置order by 排序进行rownum增加。再根据子查询,join,having 等条件进行对rownum筛选。
2、若只是取出前几条而不添加rownum字段值,可以直接进行内连接表,count内表值order by外表值的条数来进行控制选出的rownum。
3、若只是简单的排除数据可以利用exists,not exists,join ,in条件等。
注:这个用了几次发现应该注意的问题:
1、为什么没有分类排序?排序总是1等
2、为什么排序的结果不是安装分组的顺序,总是1或者随机的等?