Mysql 分组取值

来源:互联网 发布:淘宝卖家发票怎么办 编辑:程序博客网 时间:2024/06/02 04:27

这篇博客主要实现 MySQL的分组取最大值和最小值,以及分组后取每组最大N个值,以及在树形中需要分组取出父节点的所有子节点功能

一.表和数据准备

-- 数据准备drop TABLE if EXISTS ttt;CREATE TABLE `ttt` (  `empid` int(11) DEFAULT NULL,  `deptid` int(11) DEFAULT NULL,  `salary` decimal(10,2) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('1', '10', '5500.00');INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('2', '10', '4500.00');INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('10', '10', '10.00');INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('10', '20', '10.00');INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('4', '20', '4800.00');INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('5', '40', '6500.00');INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('7', '40', '44500.00');INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('6', '40', '14500.00');INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('8', '50', '6500.00');INSERT INTO ttt (`empid`, `deptid`, `salary`) VALUES ('9', '50', '7500.00');

二.分组查询每组最大值(如果是获取每组最小值的话,只需要吧max函数换成min函数即可)

-- 获取分组后的最大值select empid,deptid,salaryfrom ttt awhere a.salary=(select max(salary) from ttt b where  a.deptid =b.deptid);order by a.deptid,salary ;

三.分组后获取每组最大的两个值

-- 获取分组后每组最大的两个值-- 此处a.salary < b.salary来界定是取最大值还是最小值,这里取的是分组后的最大值-- 最后的<2表示取头两条数据select empid,deptid,salaryfrom ttt awhere (select count(*) from ttt b where a.deptid = b.deptid and a.salary < b.salary) < 2order by a.deptid,salary;

四.获取父节点下的所有子节点信息,一行显示。

此sql,你可以把deptid看为父ID,把salary看为子ID,然后就得到了每个父节点下的所有子节点

-- 分组后把指定字段值合并到一起select  deptid,GROUP_CONCAT(salary) as salaryfrom ttt group by deptid


0 0
原创粉丝点击