mysql分组排序


记录一下分组排序:

数据库结构如下:

DROP TABLE IF EXISTS `stock`;
CREATE TABLE `stock` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` varchar(255) default NULL,
  `value` int(11) default NULL,
  `Date` date default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of stock
-- ----------------------------
INSERT INTO `stock` VALUES ('1', '股票1', '10', '2013-12-25');
INSERT INTO `stock` VALUES ('2', '股票1', '9', '2013-12-26');
INSERT INTO `stock` VALUES ('3', '股票1', '8', '2013-12-25');
INSERT INTO `stock` VALUES ('4', '股票1', '7', '2013-12-24');
INSERT INTO `stock` VALUES ('5', '股票1', '5', '2013-12-23');
INSERT INTO `stock` VALUES ('6', '股票1', '4', '2013-12-22');
INSERT INTO `stock` VALUES ('7', '股票2', '19', '2013-12-26');
INSERT INTO `stock` VALUES ('8', '股票2', '18', '2013-12-25');
INSERT INTO `stock` VALUES ('9', '股票2', '17', '2013-12-24');
INSERT INTO `stock` VALUES ('10', '股票2', '15', '2013-12-23');
INSERT INTO `stock` VALUES ('11', '股票2', '14', '2013-12-22');
INSERT INTO `stock` VALUES ('12', '股票3', '109', '2013-12-26');
INSERT INTO `stock` VALUES ('13', '股票3', '108', '2013-12-25');
INSERT INTO `stock` VALUES ('14', '股票3', '107', '2013-12-24');
INSERT INTO `stock` VALUES ('15', '股票3', '105', '2013-12-23');
INSERT INTO `stock` VALUES ('16', '股票3', '104', '2013-12-22');


目标是找出每个股票排名前n的记录.排名前三的使用SQL如下:

select *,(select count(*) from stock s where s.name=s1.name and s.value>s1.value) as test from stock s1 having test<=2


窍门是表自己跟自己联立,并且这个sql中的子查询是没办法单独运行的,要把整体的SQL结构记下来。


应该还有用top 3 或者mysql的limit的 有时间再加。

猜你喜欢

转载自wwwcomy.iteye.com/blog/2013530